Журнал функции фильтра AWK

Я хочу прочитать журнал и принять некоторые решения в зависимости от того, что происходит с моей программой. Мой сценарий основан на ffmpeg, и я перенаправляю stdout для создания журнала. Затем я читаю журнал для принятия решений. Моя функция:

YT-PACTIONS()
{
tail -f $MSSLOGS/$project-$intnumber/$project-$intnumber-cache.log | awk '/speed/ { speed=$10 ; print speed ; }'
}

Это не работает. Он заполняет var speed с $1, а не с $10. Я попробовал ${10} и тоже не работал.

Если я отправлю команду в шеллскрипте, она сработает:

tail -f $MSSLOGS/$project-$intnumber/$project-$intnumber-cache.log | awk '/speed/ { speed=$10 ; print speed ; }'

Но у меня тоже есть проблема. Он показывает мне результат:

speed=1.01
speed=1.01
speed=1.03
speed=1.02
speed=1.01
speed=1.04

Но я хочу видеть только число следующим образом:

1.01
1.04
1.03    
1.02
1.01

Итак, у меня есть две ошибки: сначала $10, а затем сохранить только числа в переменной.

Пример журнала:

  CloneNew PasteExpire in 23 h
frame=  279 fps=257 q=30.0 size=N/A time=00:00:05.76 bitrate=N/A dup=111 drop=0 speed=5.3x    
frame=  344 fps=214 q=30.0 size=N/A time=00:00:07.06 bitrate=N/A dup=137 drop=0 speed=4.39x    
frame=  419 fps=198 q=29.0 size=N/A time=00:00:08.57 bitrate=N/A dup=167 drop=0 speed=4.06x 
frame=  526 fps=201 q=29.0 size=N/A time=00:00:10.70 bitrate=N/A dup=210 drop=0 speed=4.09x
frame=  741 fps=116 q=28.0 size=N/A time=00:00:15.04 bitrate=N/A dup=296 drop=0 speed=2.36x 
frame=  848 fps=123 q=32.0 size=N/A time=00:00:17.13 bitrate=N/A dup=339 drop=0 speed=2.49x
frame= 1084 fps=147 q=31.0 size=N/A time=00:00:21.86 bitrate=N/A dup=433 drop=0 speed=2.97x

Может ли кто-нибудь помочь?

1
задан 30 August 2019 в 13:45

2 ответа

Вы могли использовать этот GNU awk сценарий:

awk -v RS='[ \n]' -F'=' '/speed/{print $2+0}' file

Разделитель записей RS и FS набор должен соответствовать key=value строка.

Затем строка speed соответствие и его распечатанное присваиваемое значение. Отметьте +0 избавиться от x в конце числа.

0
ответ дан 7 December 2019 в 18:57

Можно выбрать подстроку столбца, Вы хотите использовать GNU awk substr функция:

awk '/speed/ {print substr($10, 7)+0}' file

или

awk '/speed/ {print substr($10, 7, length($10)-7)}' file

substr синтаксис:

substr(string, start [, length ])

Обе из вышеупомянутых команд эквивалентны:

  • В первом мы добавляем 0 к подстроке для избавлений от xawk добавление числа к строке, которая запускается с числа, сохраняет только числовую часть).

  • Во втором мы выбираем длину подстроки, чтобы быть одним символом меньше, чем $10 длина (это length($10)-7 и нет length($10)-1 потому что мы запустили разрезание в 7-м символе).

Вывод:

5.3
4.39
4.06
4.09
2.36
2.49
2.97
0
ответ дан 7 December 2019 в 18:57

Другие вопросы по тегам:

Похожие вопросы: