使用UNIX打印输入文件中重复行的次数



假设我有一个排序的文件:

 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

相关内容

  • 没有找到相关文章

最新更新