如何在不进行预排序(或类似操作)的情况下执行 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
我知道我可以在不进行预排序的情况下删除重复的行,例如:
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