如何做uniq -d而不预先分配(或类似的东西)

时间:2016-07-05 12:18:00

标签: bash sorting awk duplicates uniq

我知道我可以在不预先分配的情况下删除重复的行,例如:

awk '!x[$0]++' file

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

sort | uniq -d

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

我正在寻找一个单行班,如果可能的话,不需要编写脚本。

2 个答案:

答案 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

希望这是你所期待的!!