删除文本文件中的重复行…?
如何通过命令提示符删除文本文件中的重复行?
例如:我有一个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