Bash 仅打印第三个或更多出现时间的字符串
我在一个目录下运行grep命令Bash 仅打印第三个或更多出现时间的字符串,bash,shell,unix,grep,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
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脚本来实现,但我正在寻找是否有一种方法可以通过单个命令来实现它您可以这样做:
sort your_file | uniq -c | awk '$1>2 {print $2}'
对文件进行排序排序
只是一个“分组依据”,结果将是两列uniq-c
最后,使用
awk
脚本,如果计数大于2,我们将打印第二列。这是一个使用perl的非常简单的列-您还可以在其中包含一些其他管道位
perl -ne 'print if ++$seen{$_} >= 3'
awk'++a[$0]==3'
?@123:作为回答,当我复制了命令zgrep'IMPRESSION REQ的输出时,这很有效。文件中的服务器头“*|zgrep-o-P”s=.{31}”,我在该特定文件上运行命令sort your|u file | uniq-c|awk“$1>2{print$2}”,但当我将其作为单个命令zgrep'IMPRESSION REQ运行时,它会给我奇怪的输出。服务器头“*|zgrep-o-P”s=.{31}”| sort | tee uniq-c | awk'$1>2{print$2}”
perl -ne 'print if ++$seen{$_} >= 3'