假设我有一个已排序的文件:
AARAV,12345,BANK OF AMERICA,$145
AARAV,12345,BANK OF AMERICA,$145
AARAV,12345,BANK OF AMERICA,$145
RAM,124455,DUETCHE BANK,$240
我希望输出为:
AARAV,12345,BANK OF AMERICA,$145
AARAV,12345,BANK OF AMERICA,$145
使用**uniq -d file**
我能够找到重复的记录,但即使重复记录,它也只打印一次记录。我想多次打印它是重复的。
提前谢谢。
答案 0 :(得分:1)
假设您的文件名为Input.txt
。
uniq -d Input.txt | xargs -I {} grep {} Input.txt
xargs -I {}
基本上告诉xargs
在稍后的命令中看到{}
时替换正在输入的输入。
grep {} Input.txt
,其中输入行将替换{}
所在的位置。
为什么这样做?我们使用uniq -d
查找重复的条目,然后将它们用作grep
的输入模式,以匹配包含这些条目的所有行。因此,只打印重复的条目,并且它们的打印次数与文件中显示的次数完全相同。
更新:以与ksh
兼容的方式打印重复项,而不是第一次出现,因为OP上显然没有bash
系统
uniq -d Input.txt | xargs -L 1 | while read line
do
grep "$line" Input.txt | tail -n +2;
done
请注意,在上面的脚本中,我们假设没有行是另一行的子字符串。
答案 1 :(得分:0)
这应该为您提供所需的输出。它重复每个重复行N-1次。不幸的是输出没有排序,所以你必须再次通过排序来管道输出。
假设输入文件为input.txt
:
awk -F '\n' '{ a[$1]++ } END { for (b in a) { while(--a[b]) { print b } } }' input.txt | sort