linux - 使用 twist gnuwin32 删除重复行

标签 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 如何拥有相同的电子邮件。好吧,我想删除用户 2、用户 3、用户 4 但保留用户 ..反之亦然(第一个被请求拾取)删除任何其他包含相同电子邮件的行..

如果

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

等等第四..

最佳答案

这可以用 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

关于linux - 使用 twist gnuwin32 删除重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42544005/

相关文章:

json - Linux 将表从 bash 命令转换为 json

bash - 从列表创建目录

linux - 当 pids 可能与不相关的进程发生冲突时,为什么会使用 pid 文件?

python - standard_init_linux.go :178: exec user process caused "exec format error"

linux - 使用无缓冲管道作为 "dummy"文件输出

linux - 函数出错...我可以在函数中传递输入参数吗?

Linux:使用 AWK 计算两个值之间的比率

linux - 对 bash 行为感到困惑 - Bash/awk mystery

c - 如何防止子进程中的 SIGINT 传播到父进程并杀死父进程?

linux - 系统重启/关机时未运行初始化脚本