仅打印第3次或更多次出现的字符串

时间:2015-10-19 08:49:39

标签: bash shell unix grep

我在目录

中运行grep命令
zgrep 'IMPRESSION REQ. SERVER HEADERS' * | zgrep -o -P "s=.{31}"

,输出如下

  

S = 9395cb8e3284ef8a91ba6520780a9

     

S = 9395cb8e3284ef8a91ba6520780a9

     

S = a55aa6bc73d414f32d8fc343f83fc

     

S = a55aa6bc73d414f32d8fc343f83fc

     

S = 71922d4280b7cf1d7adcb51d8d0d2

     

S = 71922d4280b7cf1d7adcb51d8d0d2

     

S = 71922d4280b7cf1d7adcb51d8d0d2

     

S = 1b13dcadb9c807ab4cb985b893fd7

在unix中是否只有一个命令可以帮助我打印那些发生3次且超过3次的不同行

所以这里我的输出应该只有s=71922d4280b7cf1d7adcb51d8d0d2,因为它发生了3次,我知道它可能通过编写一个小的shell脚本,但我在寻找是否有办法通过一个命令来做到这一点

2 个答案:

答案 0 :(得分:1)

这是一个非常简单的perl - 你也可以在其中加入一些其他的管道。

perl -ne 'print if ++$seen{$_} >= 3'

答案 1 :(得分:0)

您可以这样做:

sort your_file | uniq -c | awk '$1>2 {print $2}'
  • sort对文件进行排序
  • uniq -c只是一个“分组依据”,结果将是两列
1 s=1b13dcadb9c807ab4cb985b893fd7
3 s=71922d4280b7cf1d7adcb51d8d0d2
2 s=9395cb8e3284ef8a91ba6520780a9
2 s=a55aa6bc73d414f32d8fc343f83fc

最后使用awk脚本,如果计数大于2,我们会打印第二列。