批量和计数无限标准输入

批量和计数无限标准输入

假设您有一些 linux/shell 命令(即nc),它会将一些以换行符分隔的字符串输出到 stdout。此命令永远不会结束输出(或输出很长时间)。

我正在寻找一个可以将此输出输入到其中的命令,该命令每 x 秒会给我一个计数,计算出哪一行出现的频率。

因此,我要搜索的命令采用标准输入,在换行符处进行拆分,并计算每行出现的频率。每隔 x 秒,它会输出统计数据并将计数器重置为零。

是否存在这样的命令/bash 结构?

答案1

那么像这样的事情怎么样:

#!/bin/bash                                                                     

LAST_OUTPUT=$(date +%s)                                                         
TMPFILE=$(mktemp)                                                               
INTERVAL=30                                                                     
while read LINE; do                                                             
  echo $LINE >> $TMPFILE                                                        
  NOW=$(date +%s)                                                               
  if  [[ $(($NOW - $LAST_OUTPUT)) -gt $INTERVAL  ]]; then                       
   sort < $TMPFILE | uniq -c                                                           
   echo -ne > $TMPFILE                                                         
   LAST_OUTPUT=$NOW                                                            
  fi                                                                            
done                                                                            

rm $TMPFILE                                                                     

相关内容