BASH,打印副本没有排序

时间:2014-10-08 00:11:08

标签: regex bash awk sed grep

美好的一天,

我想知道如何只打印文件中重复的单词,而不是排序。

awk的反面是:awk '!x[$0]++'。还有其他方式吗?

提前感谢任何线索。

预期输入

a
b
a
c
d
e
f
w
g
w
h

预期输出

a
w

3 个答案:

答案 0 :(得分:4)

如果查看awk语句,您会发现它会使用!取消打印条件。只需删除它,它将打印重复项:

awk 'x[$0]++'

每个副本只打印一行,即使它们再次出现:

awk 'x[$0]++ == 1'

答案 1 :(得分:1)

这可能适合你(GNU sed):

sed -rn 'G;h;/^(\S+).*\1/P' file

这使用后引用仅打印文件中出现的当前行(在本例中为单个字符)的副本。

sed -rn 'G;h;/^(\S+).*\1/!b;/^(\S+).*\1.*\1/b;P' file

仅当文件中出现另一个当前行(在本例中为单个字符)时,才使用后向引用进行打印。

答案 2 :(得分:0)

如果单词每行1个单词(或1个单词为1"单词")

uniq -d YourFile

如果是多字

tr " " "\n" YourFile | uniq -d