我需要在uniq -D
选项不支持的文件中打印所有重复的行。所以我在考虑使用awk打印重复行的另一种方法。我知道,我们在awk中有一个选项,如下所示。
TESTFILE.TXT
apple
apple
orange
orange
cherry
cherry
kiwi
strawberry
strawberry
papaya
cashew
cashew
pista
命令:
awk 'seen[$0]++' testfile.txt
但是上面只打印了唯一的重复行。我需要uniq -D
命令检索的相同输出。
apple
apple
orange
orange
cherry
cherry
strawberry
strawberry
cashew
cashew
答案 0 :(得分:13)
无需解析文件两次:
$ awk 'c[$0]++; c[$0]==2' file
apple
apple
orange
orange
cherry
cherry
strawberry
strawberry
cashew
cashew
答案 1 :(得分:3)
如果你想坚持使用普通的awk,你必须处理两次文件:一次生成计数,一次消除计数等于1的行:
awk 'NR==FNR {count[$0]++; next} count[$0]>1' testfile.txt testfile.txt
答案 2 :(得分:1)
这可能适合你(GNU sed):
func<T,TResult>()
将两行读入模式空间(PS)。如果前两行是重复的,则打印它们并循环返回并读取第三行。如果第三行或后续行重复,则打印第一行并循环返回并读取另一行。否则,删除除最后一行之外的所有行并循环返回并读取另一行等。
答案 3 :(得分:0)
这样的话,如果uniq支持-d
?
grep -f <(uniq -d testfile.txt ) testfile.txt
答案 4 :(得分:0)
awk '{if (x[$1]) { x_count[$1]++; print $0; if (x_count[$1] == 1) { print x[$1] } } x[$1] = $0}' testfile.txt
答案 5 :(得分:0)
你可以这样做:
$ uniq -d file | awk '1;1'