Я хочу прочитать журнал и принять некоторые решения в зависимости от того, что происходит с моей программой. Мой сценарий основан на 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
Может ли кто-нибудь помочь?
Вы могли использовать этот GNU awk сценарий:
awk -v RS='[ \n]' -F'=' '/speed/{print $2+0}' file
Разделитель записей RS
и FS
набор должен соответствовать key=value
строка.
Затем строка speed
соответствие и его распечатанное присваиваемое значение. Отметьте +0
избавиться от x
в конце числа.
Можно выбрать подстроку столбца, Вы хотите использовать 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
к подстроке для избавлений от x
(в awk
добавление числа к строке, которая запускается с числа, сохраняет только числовую часть).
Во втором мы выбираем длину подстроки, чтобы быть одним символом меньше, чем $10
длина (это length($10)-7
и нет length($10)-1
потому что мы запустили разрезание в 7-м символе).
Вывод:
5.3
4.39
4.06
4.09
2.36
2.49
2.97