如果我想删除某些字段重复的行,则使用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中的预排序(pre-sort)和哈希(hash)技术,但对于非常大的文件,这可能会变得很慢。
如果我想删除某些字段重复的行,则使用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中的预排序(pre-sort)和哈希(hash)技术,但对于非常大的文件,这可能会变得很慢。
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
sort -k <your fields> | awk '{print $3, $1, $2}' | uniq -f2 -u | awk '{print $2, $3, $1}'
命令来删除所有重复的行(不保留任何副本)。如果您不需要最后一个字段,请将第一个 awk
命令更改为 cut -f 1-5 -d ' '
,将 uniq
中的 -f2
更改为 -f1
,并删除第二个 awk
命令。请注意保留 HTML 标签,并使内容更加通俗易懂。
sort -u
,它并不能实现你想要的功能。相反,你应该使用uniq -u
。 - Jeremiah Willcock$ sort ~/Desktop/fruit.txt | awk '{print $3, $1, $2}' | uniq -f1 -u | awk '{print $2, $3, $1}' 1 apple 30 2 banana 21 3 apple 9 4 mango 2 $ sort -k2,2 ~/Desktop/fruit.txt | awk '{print $3, $1, $2}' | uniq -f1 -u | awk '{print $2, $3, $1}' 1 apple 30 3 apple 9 2 banana 21 4 mango 2
- annavtuniq
中的-f1
需要改为-f2
。我已经修改了答案。 - Jeremiah Willcock