删除有重复单词的行

删除有重复单词的行

我有一个包含如下行的排序文件

word1  abca
word1  abcb
word1  abcc
word2  abca
word2  abcb
word3  abbb
...........

我想要这样的东西

word1  abca
word2  abca
word3  abbb
...........

答案1

这个神奇的咒语是一个著名的 awk 习语:

awk '!seen[$1]++' file

第一次看到包含 $1 的行时,将打印该行。

答案2

awk 解决方案 - 使用变量检测新词。如果发现新词,则打印该行并将变量分配给当前词。

由于数据文件已排序,因此只有每个单词第一次出现时才会打印记录。

   awk 'BEGIN{w=""} w!=$1 {print;w=$1}' your-file

答案3

您还可以使用标志-wuniq告诉它仅比较前 N 个字符。这是否适合您的详细信息取决于您的实际数据,但如果设置或限制了字长,它应该可以工作:

$ sort file.txt | uniq -w 5
word1  abca
word2  abca
word3  abbb

或者,反转字段的顺序并使用uniq -f 1跳过比较第一个字段:

$ awk '{print $2,$1}' file.txt | uniq -f 1 | awk '{print $2,$1}'
word1 abca
word2 abca
word3 abbb

或者获取第一个字段,然后grep将搜索限制在第一个匹配项:

$ for i in $(awk '{print $1}' file.txt | sort -u); do grep -m 1 $i file.txt; done
word1  abca
word2  abca
word3  abbb

并且,为了完整起见,这里有一个 Perl 版本:

$ perl -ane 'print if $k{$F[0]}++<1' file.txt 
word1  abca
word2  abca
word3  abbb

相关内容