删除所有出现的重复行

时间:2011-02-09 17:09:01

标签: bash sorting awk duplicates

如果我想删除某些字段重复的行,那么我使用sort -u -k n,n。 但这有一次发生。如果我想删除所有重复的副​​本,是否有任何快速bash或awk方法来执行此操作?

例如我有:

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

我想:

2 banana   21
4 mango   2

我会预先分配然后在perl中使用哈希值,但是对于v。大文件,这将会很慢。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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