假设我有一个排序的文件:
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**
,我可以找到重复的记录,但即使重复,它也只能打印一次记录。我想打印它的复制次数。提前谢谢。
假设您的文件名为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
请注意,在上面的脚本中,我们假设没有一行是另一行的子字符串。
这将为您提供所需的输出。它将每个重复行重复N-1次。不幸的是,输出没有排序,所以您必须再次通过管道进行排序。
假设输入文件是input.txt
:
awk -F 'n' '{ a[$1]++ } END { for (b in a) { while(--a[b]) { print b } } }' input.txt | sort