该文件具有Unix行结束符,并且所有内容都匹配
[[:print:]]
。 我尝试了以下awk脚本以仅显示唯一行:awk 'a[$0] {next} 1' stupid.txt > less_stupid.txt
想法是通过引用数组元素来填充数组,使用文件的内容作为键,然后跳过已经在数组中存在的行。但这种方法有两个问题——首先,因为它莫名其妙地就不起作用了(即使在小的测试文件上),其次,我知道在awk将整个唯一行集加载到内存之前,我的系统会耗尽内存。
在搜索后,我发现这个答案建议:
awk '!x[$0]++'
尽管这种方法适用于小文件,但在读取整个文件之前它也会耗尽内存。
有更好的(即可行的)解决方案吗?我对几乎任何东西都持开放态度,尽管我更倾向于使用我已知的语言(bash& awk,因此标签)。为了解决问题,我试图想象出的最好方法是存储行校验和或MD5的数组,而不是存储行本身,但这只节省了一点空间,并可能发生校验和冲突。
任何提示都将非常受欢迎。如果告诉我这是不可能的,那也欢迎,这样我就不必再试图弄清楚了。 :-P
a[$0]
,与你发现的答案不同。 - Jonathan Leffler