删除所有出现的重复行
如果我想删除某些字段重复的行,那么我使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这将使您的输出保持与输入相同的顺序:
This will keep your output in the same order as your input:
尝试
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 firstawk
command to justcut -f 1-5 -d ' '
, change the-f2
inuniq
to-f1
, and remove the secondawk
command.