如何在不进行预排序(或类似操作)的情况下执行 uniq -d

How to do uniq -d without presorting (or something similar)

我知道我可以在不进行预排序的情况下删除重复的行,例如:

awk '!x[[=10=]]++' file

但是,我的目标是只打印重复的且只打印一次的行。如果不是预排序问题

sort | uniq -d

会很完美。但是订单对我来说非常重要。有没有办法用 awk、grep 或类似的东西来做到这一点?

我正在寻找一个不需要编写脚本的单行本。

尝试简单地从您的 awk 命令中删除 !

bash-4.1$ cat /tmp/inp.txt 
abc
def
abc
xyz
def
hello

bash-4.1$ awk 'x[[=10=]]++ == 1' /tmp/inp.txt 
abc
def

希望这就是您所期望的!!

只需检查 x[[=12=]] 的值:

awk 'x[[=10=]]++ == 1' file.txt

上面第二次看到会打印一行

或前缀为 ++:

awk '++x[[=11=]] == 2' file.txt