使用扭曲gnuwin32删除重复的行

时间:2017-03-01 23:19:44

标签: linux bash awk gawk gnuwin32

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

我有一个名为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都有相同的电子邮件..好吧我想删除user2,user3,user4但是保留用户..反之亦然(第一个被请求接收)删除任何其他包含相同电子邮件的行..

所以,如果

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

等第四......

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

awk救援!

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

user:display:email@email.com