在文件中查找第一个重复行

时间:2014-01-29 23:42:02

标签: linux shell

我想在文本文件中找到第一个重复行。

我通常在文件中找到重复行的方法是使用uniq,它接受一个排序文件,所以我:

sort inputfile | uniq -c | sort -nr > outputfile

计算所有重复项并按降序打印。

通过使用uniq进行排序,我在原始复制发生的时间/地点丢失,我现在只对第一个重复的行感兴趣。

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

awk '{ if(seen[$0]) { print; exit } seen[$0] = 1 }' file

这将跟踪每一行,然后打印之前看到的第一行。如果您想要行号,也可以打印NR。

awk '{ if(seen[$0]) { print NR, $0; exit } seen[$0] = 1 }' file

答案 1 :(得分:0)

因为我知道Perl,所以我倾向于将它用于单行:

perl -e 'foreach (<>) { $n++; if ($l{$_}++) { print "$n\n"; last; } }' < infile

这将打印到STDOUT第一个副本的行号。