Предположим, у вас есть какая-то команда linux/shell (т.е. nc), которая выводит на стандартный вывод несколько строк, разделенных переносом строки. Эта команда никогда не заканчивается выводом (или выводом в течение длительного времени).

Я ищу команду, в которую я могу направить этот вывод и которая дает мне каждые x секунд подсчитывать, как часто какая строка встречается.

Таким образом, команда, которую я ищу, берет стандартный ввод, разбивает разрывы строк и подсчитывает, как часто появляются все строки. Каждые x секунд он выводит статистику и сбрасывает счетчики на ноль.

Существует ли такая команда /bash?

1 ответ1

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                                                                     

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .