删除所有出现的重复行

发布于 2024-10-16 15:36:00 字数 305 浏览 1 评论 0原文

如果我想删除某些字段重复的行,那么我使用 sort -u -kn,n。 但这仍然发生一件事。如果我想删除所有出现的重复项,是否有任何快速的 bash 或 awk 方法可以做到这一点?

例如,我有:

1   apple   30
2   banana   21
3   apple   9
4   mango   2

我想要:

2 banana   21
4 mango   2

我将预排序,然后在 perl 中使用哈希,但对于大文件,这会很慢。

If I want to remove lines where certain fields are duplicated then I use sort -u -k n,n.
But this keeps one occurrence. If I want to remove all occurrences of the duplicate is there any quick bash or awk way to do this?

Eg I have:

1   apple   30
2   banana   21
3   apple   9
4   mango   2

I want:

2 banana   21
4 mango   2

I will presort and then use a hash in perl but for v. large files this is going to be slow.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

逆光下的微笑 2024-10-23 15:36:00

这将使您的输出保持与输入相同的顺序:

awk '{seen[$2]++; a[++count]=$0; key[count]=$2} END {for (i=1;i<=count;i++) if (seen[key[i]] == 1) print a[i]}' inputfile

This will keep your output in the same order as your input:

awk '{seen[$2]++; a[++count]=$0; key[count]=$2} END {for (i=1;i<=count;i++) if (seen[key[i]] == 1) print a[i]}' inputfile
妄断弥空 2024-10-23 15:36:00

尝试 sort -k| awk '{print $3, $1, $2}' | uniq-f2-u| awk '{print $2, $3, $1}' 删除所有重复的行(不保留任何副本)。如果您不需要最后一个字段,请将第一个 awk 命令更改为 cut -f 1-5 -d ' ',更改 -f2< /code> 将 uniq 中的 /code> 更改为 -f1,并删除第二个 awk 命令。

Try sort -k <your fields> | awk '{print $3, $1, $2}' | uniq -f2 -u | awk '{print $2, $3, $1}' to remove all lines that are duplicated (without keeping any copies). If you don't need the last field, change that first awk command to just cut -f 1-5 -d ' ', change the -f2 in uniq to -f1, and remove the second awk command.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文