有时候删除文件里的重复行是一个很常见的需求,这个用 shell 命令有很多处理方法。
第一种方案是用 sort 命令的 -u 参数:
$ sort -u input.txt > output.txt
第二种方案是用 awk 命令,它的关键在于用一个字典来保存记录:
$ awk '!seen[$0]++' input.txt > output.txt
这和第一种方案的区别在于,即使文件中重复行不连续,依然可以删除。
第三种方案是用 sed 命令,但是其实不大推荐,它相比第一种方案复杂多,而且很容易写错:
$ sort -n input.txt | sed '$!N;/^\(.*\)\n\1$/!P;D' > output.txt