Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 仅打印第三个或更多出现时间的字符串_Bash_Shell_Unix_Grep - Fatal编程技术网

Bash 仅打印第三个或更多出现时间的字符串

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

我在一个目录下运行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脚本来实现,但我正在寻找是否有一种方法可以通过单个命令来实现它

您可以这样做:

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'