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

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

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

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

答案1

使用 awk

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

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

答案2

有多种方法可以做到这一点。如果顺序不重要,那么 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>

答案3

找到了一个不错的 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

相关内容