删除文本文件中的重复行…?

如何通过命令提示符删除文本文件中的重复行?

例如:我有一个10MB的文本文件,我想只保留一行My line ,但在文本文件的某处有2个My line

使用awk

 awk '!x[$0]++' infile.txt > outfile.txt 

它的工作方式是它保持数组中的行数,如果当前计数为零,即第一次出现,则打印该行,否则它继续到下一行。

有多种方法可以做到这一点。 如果排序不重要,那么sort和uniq最容易记住。 但是,如果你想维护文本文件的顺序但删除重复项,那么awk就可以了。 你也可以使用sed我相信。

这是一个例子

 /tmp/debugSys>cat fileWithDupText.txt line2 line21 line2 line1 line2 /tmp/debugSys> /tmp/debugSys>cat fileWithDupText.txt | awk '!a[$0]++' line2 line21 line1 /tmp/debugSys>sort fileWithDupText.txt | uniq line1 line2 line21 /tmp/debugSys>sort -u fileWithDupText.txt line1 line2 line21 /tmp/debugSys> 

找到了一个很好的Perl单行程,使用md5哈希;) ,但这很慢,只有你有很长的行和一个巨大的文件,它会大大减少内存使用,这是值得的:

 perl -MDigest::MD5 -ne '$seen{Digest::MD5::md5($_)}++ or print' foo 

因此只需使用

 perl -ne '$seen{$_}++ or print' foo 

资源


cat foo

 foo fii foo bar foobar foobar foo 

perl -ne '$seen{$_}++ or print' foo

 foo fii foo bar foobar