我想要做的就是在这样一个巨大的文件中保留不重复的行:
..
a
b
b
c
d
d
..
然后是所需的输出:
..
a
c
..
非常感谢提前。
答案 0 :(得分:5)
uniq
已arg -u
-u, --unique only print unique lines
示例:
$ printf 'a\nb\nb\nc\nd\nd\n' | uniq -u
a
c
如果您的数据未排序,请先执行sort
$ printf 'd\na\nb\nb\nc\nd\n' | sort | uniq -u
$ cat foo
d
c
b
b
a
d
$ grep -f <(sort foo | uniq -u) foo
c
a
greps
上述uniq
获取的模式文件。但我可以想象,如果你的文件非常庞大,那么它需要很长时间。
同样没有一些丑陋的流程替换:
$ sort foo | uniq -u | grep -f- foo
c
a
答案 1 :(得分:2)
这个awk应该只列出文件中没有重复的行:
awk 'seen[$0]++{dup[$0]} END {for (i in seen) if (!(i in dup)) print i}' file
a
c
请记住,由于awk中数组的散列,原始的行顺序可能会发生变化。
编辑:保留原始订单:
awk '$0 in seen{dup[$0]; next}
{seen[$0]++; a[++n]=$0}
END {for (i=1; i<=n; i++) if (!(a[i] in dup)) print a[i]}' file
a
c
这是为awk
量身定制的工作,它不需要多个进程,管道和进程替换,对于更大的文件会更有效。
答案 2 :(得分:-2)
当您的文件被排序时,它很简单:
cat file.txt | uniq > file2.txt
mv file2.txt file.txt