假设您有一些 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