LinuxForum.Fans
Тема

awk or grep?

Автор: asco_ne 28 сообщений 2157 просмотров
04.09.2017 22:29 #424959

Привет. Столкнулся с проблемой которую не могу решить. Проблема следующая: есть часть лога

text
2017-09-04 10:58:47,576 [JavaFX Application Thread] [INFO ] [OperationStatisticService.end]:43 - [END] OPENING_FROM_HISTORY duration: 65 ms

Задача: мне нужно чтобы после запроса в логах было только значение времени - 65

Я активно пользуюсь egrep. но здесь скорее всего регулярные выражения с ним работать не будут. Нужен awk. Но мои познания в нем не велики. Буду благодарен за любую помощь

05.09.2017 08:26 #424960

[console=inline]awk '{print $13}'[/console] ну это в том случае если все строки однотипные

"asco_ne" написал:
но здесь скорее всего регулярные выражения с ним работать не будут.
С чего бы?
[console=inline]grep -oE "(duration).*"| grep -oE "([0-9])*"[/console]

Еще вот так: [console=inline]sed 's/.*duration: //g'|sed 's/ .*//g'[/console]
05.09.2017 12:25 · отредактировано #424966

DiabloPC, спасибо за информацию. Но есть небольшой нюанс, Эта часть работает [console]grep -oE "(duration).*"[/console] но вот здесь [console]| grep -oE "([1-9])*"[/console] не находит. Это странно, я понимаю о чем речь, но не могу понять почему не работает, вроде все логично

Вот полный запрос [console]log | grep -oE "(duration).*" | grep -oE "([1-9])*"[/console]
* log - это алиас

05.09.2017 12:57 #424967

asco_ne, Странно....
[console]dcrp@linux-5plo:~> cat 1111
2017-09-04 10:58:47,576 [JavaFX Application Thread] [INFO ] [OperationStatisticService.end]:43 - [END] OPENING_FROM_HISTORY duration: 65 ms
dcrp@linux-5plo:~> <./1111 grep -oE "(duration).*" | grep -oE "([1-9])*"
65
[/console]
Добавлено: 5th Sep 2017 12:57:55 pm

А можно больше одной строки вывода этого "log"?

Да, кста! Я немного ошибся: не [console=inline]([1-9])[/console] a [console=inline]([0-9])[/console]

05.09.2017 14:19 · отредактировано #424968

это строка по grep 'duration'

Показать
[console]2017-09-05 07:13:36,364 [pool-5-thread-1 ] [INFO ] [OperationStatisticService.end]:43 - [END] THIRD_PARTY_BACK_OFFICE_UPDATE duration: 0 ms
2017-09-05 07:16:47,588 [JavaFX Application Thread] [INFO ] [OperationStatisticService.end]:43 - [END] SWITCHING_HISTORY_TAB duration: 277 ms
2017-09-05 07:16:50,029 [JavaFX Application Thread] [INFO ] [OperationStatisticService.end]:43 - [END] BASKET_RENDER duration: 30 ms
2017-09-05 07:16:50,029 [JavaFX Application Thread] [INFO ] [OperationStatisticService.end]:43 - [END] OPENING_FROM_HISTORY duration: 58 ms
2017-09-05 07:16:51,593 [JavaFX Application Thread] [INFO ] [OperationStatisticService.end]:43 - [END] BASKET_RENDER duration: 31 ms
2017-09-05 07:16:51,593 [JavaFX Application Thread] [INFO ] [OperationStatisticService.end]:43 - [END] OPENING_FROM_HISTORY duration: 64 ms
2017-09-05 07:16:53,096 [JavaFX Application Thread] [INFO ] [OperationStatisticService.end]:43 - [END] BASKET_RENDER duration: 32 ms
2017-09-05 07:16:53,096 [JavaFX Application Thread] [INFO ] [OperationStatisticService.end]:43 - [END] OPENING_FROM_HISTORY duration: 67 ms
2017-09-05 07:17:29,429 [JavaFX Application Thread] [INFO ] [OperationStatisticService.end]:43 - [END] BASKET_RENDER duration: 28 ms
2017-09-05 07:17:29,430 [JavaFX Application Thread] [INFO ] [OperationStatisticService.end]:43 - [END] OPENING_FROM_HISTORY duration: 56 ms
2017-09-05 07:17:30,192 [JavaFX Application Thread] [INFO ] [OperationStatisticService.end]:43 - [END] BASKET_RENDER duration: 27 ms
2017-09-05 07:17:30,193 [JavaFX Application Thread] [INFO ] [OperationStatisticService.end]:43 - [END] OPENING_FROM_HISTORY duration: 56 ms
2017-09-05 07:17:30,778 [JavaFX Application Thread] [INFO ] [OperationStatisticService.end]:43 - [END] BASKET_RENDER duration: 27 ms
2017-09-05 07:17:30,779 [JavaFX Application Thread] [INFO ] [OperationStatisticService.end]:43 - [END] OPENING_FROM_HISTORY duration: 58 ms
2017-09-05 07:17:31,369 [JavaFX Application Thread] [INFO ] [OperationStatisticService.end]:43 - [END] BASKET_RENDER duration: 33 ms
2017-09-05 07:17:31,369 [JavaFX Application Thread] [INFO ] [OperationStatisticService.end]:43 - [END] OPENING_FROM_HISTORY duration: 63 ms
2017-09-05 07:17:31,856 [JavaFX Application Thread] [INFO ] [OperationStatisticService.end]:43 - [END] BASKET_RENDER duration: 30 ms
2017-09-05 07:17:31,857 [JavaFX Application Thread] [INFO ] [OperationStatisticService.end]:43 - [END] OPENING_FROM_HISTORY duration: 59 ms
2017-09-05 07:17:57,668 [pool-5-thread-1 ] [INFO ] [OperationStatisticService.end]:43 - [END] UPDATE_FROM_CSO duration: 5886 ms
[/console]

обычный лог, без грепа

Показать
[console]2017-09-05 07:18:48,175 [JavaFX Application Thread] [INFO ] [OperationStatisticService.start]:24 - [START] OPENING_FROM_HISTORY
2017-09-05 07:18:48,175 [JavaFX Application Thread] [INFO ] [PerformBasketDelegateService.getBasket]:1095 - Get basket
2017-09-05 07:18:48,179 [JavaFX Application Thread] [INFO ] [MetaInfoDelegateService.reloadSaleItems]:155 - Reloading sale items...
2017-09-05 07:18:48,182 [JavaFX Application Thread] [INFO ] [MetaInfoDelegateService.reloadSaleItems]:167 - Reloading sale items finished
2017-09-05 07:18:48,183 [JavaFX Application Thread] [INFO ] [MetaInfoDelegateService.reloadSaleDepartments]:273 - Reloading sale departments...
2017-09-05 07:18:48,186 [JavaFX Application Thread] [INFO ] [MetaInfoDelegateService.reloadSaleDepartments]:285 - Reloading sale departments finished
2017-09-05 07:18:48,187 [JavaFX Application Thread] [INFO ] [MetaInfoDelegateService.reloadSaleCarWashProducts]:289 - Reloading sale car wash...
2017-09-05 07:18:48,189 [JavaFX Application Thread] [INFO ] [MetaInfoDelegateService.reloadSaleCarWashProducts]:302 - Reloading sale car wash finished
2017-09-05 07:18:48,190 [JavaFX Application Thread] [INFO ] [MetaInfoDelegateService.reloadSaleFuels]:306 - Reloading sale fuels...
2017-09-05 07:18:48,193 [JavaFX Application Thread] [INFO ] [MetaInfoDelegateService.reloadSaleFuels]:319 - Reloading sale fuels finished
2017-09-05 07:18:48,202 [JavaFX Application Thread] [INFO ] [OperationStatisticService.start]:24 - [START] BASKET_RENDER
2017-09-05 07:18:48,203 [JavaFX Application Thread] [INFO ] [BasketService.applyQuantity]:961 - Apply quantity<1>
2017-09-05 07:18:48,234 [JavaFX Application Thread] [INFO ] [OperationStatisticService.end]:43 - [END] BASKET_RENDER duration: 31 ms
2017-09-05 07:18:48,235 [JavaFX Application Thread] [INFO ] [OperationStatisticService.end]:43 - [END] OPENING_FROM_HISTORY duration: 60 ms
2017-09-05 07:18:48,886 [JavaFX Application Thread] [INFO ] [OperationStatisticService.start]:24 - [START] OPENING_FROM_HISTORY
2017-09-05 07:18:48,886 [JavaFX Application Thread] [INFO ] [PerformBasketDelegateService.getBasket]:1095 - Get basket
2017-09-05 07:18:48,890 [JavaFX Application Thread] [INFO ] [MetaInfoDelegateService.reloadSaleItems]:155 - Reloading sale items...
2017-09-05 07:18:48,894 [JavaFX Application Thread] [INFO ] [MetaInfoDelegateService.reloadSaleItems]:167 - Reloading sale items finished
2017-09-05 07:18:48,895 [JavaFX Application Thread] [INFO ] [MetaInfoDelegateService.reloadSaleDepartments]:273 - Reloading sale departments...
2017-09-05 07:18:48,898 [JavaFX Application Thread] [INFO ] [MetaInfoDelegateService.reloadSaleDepartments]:285 - Reloading sale departments finished
2017-09-05 07:18:48,899 [JavaFX Application Thread] [INFO ] [MetaInfoDelegateService.reloadSaleCarWashProducts]:289 - Reloading sale car wash...
2017-09-05 07:18:48,902 [JavaFX Application Thread] [INFO ] [MetaInfoDelegateService.reloadSaleCarWashProducts]:302 - Reloading sale car wash finished
2017-09-05 07:18:48,902 [JavaFX Application Thread] [INFO ] [MetaInfoDelegateService.reloadSaleFuels]:306 - Reloading sale fuels...
2017-09-05 07:18:48,906 [JavaFX Application Thread] [INFO ] [MetaInfoDelegateService.reloadSaleFuels]:319 - Reloading sale fuels finished
2017-09-05 07:18:48,915 [JavaFX Application Thread] [INFO ] [OperationStatisticService.start]:24 - [START] BASKET_RENDER
2017-09-05 07:18:48,915 [JavaFX Application Thread] [INFO ] [BasketService.applyQuantity]:961 - Apply quantity<1>
2017-09-05 07:18:48,946 [JavaFX Application Thread] [INFO ] [OperationStatisticService.end]:43 - [END] BASKET_RENDER duration: 31 ms
2017-09-05 07:18:48,947 [JavaFX Application Thread] [INFO ] [OperationStatisticService.end]:43 - [END] OPENING_FROM_HISTORY duration: 61 ms
[/console]
05.09.2017 14:47 #424969

хмм... отлично все фильтрует и обрезает:
[console=user]<./1111 grep -oE "(duration).*" | grep -oE "([0-9])*"
31
60
31
61
[/console]

05.09.2017 15:01 #424970

ммм... спасибо, значит проблема у меня

05.09.2017 15:06 #424971

asco_ne, Если что, я проверяю на вот таком:
[console=user]grep -V
grep (GNU grep) 2.16
[/console]

05.09.2017 15:49 #424972

когда я скопировал лог, и проверил как [console]cat new.txt | grep -oE "(duration).*"| grep -oE "([0-9])*"[/console] ТО и вправду работает все отлично. Получается что когда я запускаю tail -f ... то возникают проблемы со второй частью

05.09.2017 15:57 #424973

"asco_ne" написал:
Получается что когда я запускаю tail -f ...
Ыыыы, а где там tail то?
05.09.2017 16:02 · отредактировано #424974

он зашит в алиас log, я запускал и без алиаса как [console]tail -f 'myLog' | grep -oE "(duration).*"| grep -oE "([0-9])*"[/console] Результат такой же. Да, моя ошибка что не указал) запарился. И что самое интересное, не срабатывает 2 ой grep

05.09.2017 17:58 #424975

asco_ne, Вот так работает: [console]tail --follow=name SOMEFILE | grep --line-buffered -oE "(duration).*" | grep -oE "([0-9])*"[/console]

05.09.2017 19:24 · отредактировано #424976

grep duration LOGFILE |awk '{ print $(NF-1) $NF }'

если не нужно "ms" то последний $NF можно убрать

05.09.2017 19:41 #424977

dyasny, Всеравно работать не будет без параметра -F для tail и --line-buffered для grep

05.09.2017 23:29 #424978

Ну тут все дело в буфере можно так же, для любой команды используемой в конвейере сделать без буфера:
[console]$ tail -f 'myLog' |stdbuf -o0 команда[/console]

06.09.2017 02:22 #424980

"ormorph" написал:
$ tail -f 'myLog' |stdbuf -o0 команда
Неа, не работает
если tail -f то ведет себя как и раньше,
а если tail -F то вот это:
Показать
[console=user] tail -F 111 |stdbuf -o0 grep duration | awk '{ print $(NF-1) $NF }'
0ms
277ms
0ms
27ms
tail: '111' has been replaced; following new file
0ms
277ms
0ms
27ms
27ms
tail: '111' has been replaced; following new file
0ms
277ms
0ms
27ms
27ms
27ms
[/console]
06.09.2017 04:02 #424984
"DiabloPC" написал:
dyasny, Всеравно работать не будет без параметра -F для tail и --line-buffered для grep

само собой. Я просто наглядно показал как достать предпоследнее значение из строки

06.09.2017 06:27 #424986
"DiabloPC" написал:
Неа, не работает
если tail -f то ведет себя как и раньше,

Хм да все работает, не работает только если файл удаляется и создается новый с таким же именем.

06.09.2017 10:01 · отредактировано #424987

Ребята спасибо за помощь! DiabloPC, все отлично работает! Можно ли теперь это реализовать через bash скрипт? Если ввести переменные 'a' 'b' ... и прописать значение "duration", '...', '...' для каждой переменной например. И используя конструкцию if then else. Чтобы в зависимости от того что придет в переменную, grep это находил. Ну например: a='duration', b='history', c='render' и т.д. И если в логах попадает это значение, то tail находит именно это время

07.09.2017 15:53 #425002

попытался записать вышеизложенное решение в скрипт, но не получилось
[console]
#!/bin/bash

cd /var/log/сore

case $variable in
HISTORY)
tail --follow=name core | grep --line-buffered -oE "($variable).*" | grep -oE "([0-9])*"
;;
RENDER)
tail --follow=name core | grep --line-buffered -oE "($variable).*" | grep -oE "([0-9])*"
;;
MANUALLY)
tail --follow=name core | grep --line-buffered -oE "($variable).*" | grep -oE "([0-9])*"
;;
esac

[/console]

Может кто-то подсказать? Я еще на этапе обучения, и могу делать простые ошибки

Войдите или зарегистрируйтесь, чтобы ответить.