0

好的,所以我想删除重复的行,但它比这更复杂..

我有一个名为 users.txt 的文件,文件示例是:

users:email@email.com
users1:email@email.com

现在由于我的系统中的一个错误,人们能够使用与其他人相同的电子邮件进行注册,所以我想删除如果线路多次使用相同的电子邮件,问题示例:

user:display:email@email.com
user2:email@email.com
user3:email@email.com
user4:email@email.com

请注意用户、用户 2、用户 3、用户 4 都具有相同的电子邮件。我想删除用户 2、用户 3、用户 4 但保留用户 .. 反之亦然(第一个由请求提取)删除任何其他包含相同的行电子邮件..

因此,如果

email@email.com is in 20 lines remove 19
spam@spam.com is in 555 lines remove 554

所以第四个..

4

2 回答 2

0

awk救援!

$ awk -F: '!a[$NF]++' file 

user:display:email@email.com
于 2017-03-02T01:59:24.353 回答
0

这可以通过以下方式完成awk

awk '!a["user:display:email@email.com"]++' filename

++意思是,转向True。所以,在它匹配打印结果之后。

!在这种情况下使用,以扭转局面。所以在比赛之后它变成了假。(如比赛后不打印)

例子:

$ awk 'a["user:display:email@email.com"]++' filename 
user2:email@email.com
user3:email@email.com
user4:email@email.com
line_random1
linerandom_2_

现在有了!

$ awk '!a["user:display:email@email.com"]++' filename
user:display:email@email.com

所以,现在你只需要过滤掉要awk打开的内容。不知道您的文件有多大,至少要计算我会执行以下操作的条目:

$ grep -o 'email@email.com' filename | wc -l
4

如果您知道要awk打开什么,只需将其写入一个新文件 - 只是为了保存。

awk '!a["user:display:email@email.com"]++' filename >> new_filename
于 2017-03-02T00:32:54.290 回答