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