Как получить записать значение в переменную из изменяющегося вывода команды Linux?

Мне нужно получить одно значение из вывода.

tail -f access.log | pv -l -a -i10 >/dev/null 
[4.2/s]


Проблема в том, что команда работает в потоковом режиме. Возможно ли получить из вывода подобных команд одно значение?
  • Вопрос задан
  • 608 просмотров
Пригласить эксперта
Ответы на вопрос 1
selivanov_pavel
@selivanov_pavel
Linux admin
Подозрительно кривая и неудобная задача. Подозреваю, что делать надо как-то по-другому, предлагаю написать сюда оригинальную проблему и обсудить, как её решать.

Если очень хочется извращений - можно направить вывод первой команды с помощью `tee` в fifo-файл, а оттуда параллельно считать нужную строку чем-то вроде `sed -n '5p' | cut -d\ -f2`

UPD:
Вопросом заинтересовался мой коллега, и выдал вот такое решение:
tailf access.log | while read -r line ; do
((a++)) ;
nd=$(date "+%s");  [ -z ${ld+x} ]  && ld=$nd || if (( $nd-$ld >=10 )); then 
echo  "$a/10"|bc ; ld=$nd; a=0;
fi;
done

Глядя на которое, становится очевидно, что писать такое на баше всё-таки не надо :)

UPD2:
Второй вариант от коллеги:
tailf access.log | awk 'BEGIN { st=systime(); } {  ++count ;  ct=systime(); if (ct-st >= 10) { print count/10 ; count=0; st=ct } }'
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы