我可以从小型文本文件中删除重复条目,但无法从大型文本文件中删除。
我有一个4MB的文件。
该文件的开头如下:
aa
aah
aahed
aahed
aahing
aahing
aahs
aahs
aal
aalii
aalii
aaliis
aaliis
...
我希望能够去除重复项。
例如,“aahed”出现了两次,我只想让它出现一次。
无论我尝试什么单行命令,这个大列表都不会改变。
如果我输入:sort big_list.txt | uniq | less
我会看到:
aa
aah
aahed
aahed <-- didn't get rid of it
aahing
aahing <-- didn't get rid of it
aahs
aahs <-- didn't get rid of it
aal
...
然而,如果我从这个文本文件的顶部复制一小段单词并在这些数据上重新运行该命令,它会按预期工作。这些程序是否拒绝排序是因为文件太大了吗?我认为4MB并不算很大。它不会输出警告或任何提示。我很快写了一个自己的“uniq”程序,它有同样的行为。它可以对列表的一个小子集进行操作,但对4MB文本文件没有任何作用。我的问题是什么?编辑:以下是十六进制转储:
00000000 61 61 0a 61 61 68 0a 61 61 68 65 64 0a 61 61 68 |aa.aah.aahed.aah|
00000010 65 64 0d 0a 61 61 68 69 6e 67 0a 61 61 68 69 6e |ed..aahing.aahin|
00000020 67 0d 0a 61 61 68 73 0a 61 61 68 73 0d 0a 61 61 |g..aahs.aahs..aa|
00000030 6c 0a 61 61 6c 69 69 0a 61 61 6c 69 69 0d 0a 61 |l.aalii.aalii..a|
00000040 61 6c 69 69 73 0a 61 61 6c 69 69 73 0d 0a 61 61 |aliis.aaliis..aa|
61 61 68 65 64 0a
a a h e d \r
61 61 68 65 64 0d
a a h e d \n
解决方案:不同的行分隔符
uniq
不应该关心文件的大小,因为(由于它要求文件已经排序),它一次只需要在内存中存储几行。 - rrahead
命令来测试它是否仅在前几行有效? - Larry