LINUX.ORG.RU

Оптимизация скрипта разбора логов


0

1

Пишу скрипт (zsh) для разбора логов по кодам ошибок и количество байт прошедшему по этому коду. Логи в *.gz, поэтому предварительно вывожу их на stdout через zcat и читаю построчно.

...
{for logfile in *.gz;zcat $logfile} | while read line;do
error_code=$(echo $line | cut -d'|' -f41)
volume=$(echo $line | cut -d'|' -f67)
...
done

скрипт простой и короткий, но работает не сказать чтоб очень быстро, а логов несколько гигабайт каждый день. Грешу на способ вычленения нужных полей и тройной вывод каждой строки.
Если ли варианты оптимизации?

★★★★★

Можно всё сделать на awk ( -F \| '{...}') или писать на нормальном скриптовом языке.

mashina ★★★★★
()
Ответ на: комментарий от Eddy_Em

Можно еще и индексацию сделать простенькую...

Eddy_Em ☆☆☆☆☆
()

Чистый шелл скрипт быстрее awk, насколько я знаю.
На сях слишком уж давно не писал, была конечно мысль, но решил не ворошить, а поискать более красивый вариант на шелле

zolden ★★★★★
() автор топика
Ответ на: комментарий от zolden

Ога, особенно если /usr/bin/cut вызывать несколько раз для каждой строчки. Пиши на нормальном скриптовом языке и не выпендривайся.

vasilenko ★★
()
Ответ на: комментарий от zolden

>> Чистый шелл скрипт быстрее awk, насколько я знаю.

awk разный бывает. Как и шелл.

GotF ★★★★★
()
Ответ на: комментарий от zolden

> Чистый шелл скрипт быстрее awk, насколько я знаю.

Пьяный, что ли?

AnDoR ★★★★★
()

zcat *gz | awk '-F|' '{print $41, $67}'

AnDoR ★★★★★
()
Ответ на: комментарий от zolden

Чистый шелл скрипт быстрее awk, насколько я знаю.

чистый шелл это непредсказуемое гогно.

mashina ★★★★★
()

мот в tmpfs сохранять - пайпы вобщемто и тормозят

anonymous
()

да, думаю awk

ну конечно всё было не так просто как предполагали комментаторы, но разобравшись с ассоциативными массивами awk (а так хотелось разрулить всё ассоциативными массивами zsh...) пришёл к такому варианту:

(for logfile in *.gz;zcat $logfile) | awk -F'|' '{a[$41]+=$67;b[$41]++;total+=$67}END{for (i in a) {print i, a[i], b[i],a[i]/total*100"% «}}'

работает примерно в 1200 раз быстрее первоначального варианта.

zolden ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.