我知道我可以在不预先分配的情况下删除重复的行,例如:
awk '!x[$0]++' file
但是,我的目标是只打印重复且只打印一次的行。如果不是预先解决的问题
sort | uniq -d
会很完美。但订单对我来说非常重要。有没有办法用awk,grep或类似的方法做到这一点?
我正在寻找一个单行班,如果可能的话,不需要编写脚本。
答案 0 :(得分:3)
只需检查x[$0]
的价值:
awk 'x[$0]++ == 1' file.txt
以上将在第二次看到时打印一行。
或使用前缀++
:
awk '++x[$0] == 2' file.txt
答案 1 :(得分:2)
尝试从!
命令中删除awk
。
bash-4.1$ cat /tmp/inp.txt
abc
def
abc
xyz
def
hello
bash-4.1$ awk 'x[$0]++ == 1' /tmp/inp.txt
abc
def
希望这是你所期待的!!