URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9885
[ Назад ]

Исходное сообщение
"Скрипт в командной строке Linux"

Отправлено Solmir , 28-Июл-14 13:10 
Всем привет.
Недавно начал осваивать работу в командной строке Linux.
Помогите, пожалуйста, с такой задачей.
Нужно посчитать в логах количество строк, которые удовлетворяли бы таким значениям тэгов.
(1057=Y & 54=1 & 150=F & (value of tag14)=(value of tag 32))
Всё, кроме последнего условия получается считать с помощью grep.
a5=`grep 1057=Y _1 *путь к файлам* |grep -c 54=2 |grep -c 150=F|`
Основная проблема в сравнении значений 14-го и 32-го тэгов.
Как это сделать?
У меня лишь получилось вырезать из каждой записи кусок со значением 14-го тэга с помощью команд cat и awk.
Подумал, что получится сделать то же самое с 32-м тэгом, а потом как-то записать все элементы в массив и сравнить их.
Надеюсь на ваши советы.

Содержание

Сообщения в этом обсуждении
"Скрипт в командной строке Linux"
Отправлено Andrey Mitrofanov , 28-Июл-14 13:28 
> Нужно посчитать в логах количество строк, которые удовлетворяли бы таким значениям тэгов.
> a5=`grep 1057=Y _1 *путь к файлам* |grep -c 54=2 |grep -c 150=F|`
> Основная проблема в сравнении значений 14-го и 32-го тэгов.

Очень заинтересовало Ваше сообщение. Расскажите, пожалуйста, кто такие "тагши в логах" и какая, новая для меня, технология их создаёт? Уж не journald ли?

И Вам спасибо.


"Скрипт в командной строке Linux"
Отправлено Solmir , 28-Июл-14 13:39 
>> Нужно посчитать в логах количество строк, которые удовлетворяли бы таким значениям тэгов.
>> a5=`grep 1057=Y _1 *путь к файлам* |grep -c 54=2 |grep -c 150=F|`
>> Основная проблема в сравнении значений 14-го и 32-го тэгов.
> Очень заинтересовало Ваше сообщение. Расскажите, пожалуйста, кто такие "тагши в логах"
> и какая, новая для меня, технология их создаёт? Уж не journald
> ли?
> И Вам спасибо.

Что вы имели ввиду под выражением "тагши в логах"?


"Скрипт в командной строке Linux"
Отправлено Andrey Mitrofanov , 28-Июл-14 13:52 
>>> Нужно посчитать в логах количество строк, которые удовлетворяли бы таким значениям тэгов.
>>> a5=`grep 1057=Y _1 *путь к файлам* |grep -c 54=2 |grep -c 150=F|`
>>> Основная проблема в сравнении значений 14-го и 32-го тэгов.
>> Очень заинтересовало Ваше сообщение. Расскажите, пожалуйста, кто такие "тагши в логах"
>> и какая, новая для меня, технология их создаёт? Уж не journald
>> ли?
>> И Вам спасибо.
> Что вы имели ввиду под выражением "тагши в логах"?

Извините, опечатался. "Таги" конечно. Строки в логах знаю, а кто такие "таги в логах" - нет. Даже гугль не помогает, duckduckgo с яндексом пишут про блоги. Неужели их можно grep-ать?


"Скрипт в командной строке Linux"
Отправлено Solmir , 28-Июл-14 14:20 
>[оверквотинг удален]
>>>> a5=`grep 1057=Y _1 *путь к файлам* |grep -c 54=2 |grep -c 150=F|`
>>>> Основная проблема в сравнении значений 14-го и 32-го тэгов.
>>> Очень заинтересовало Ваше сообщение. Расскажите, пожалуйста, кто такие "тагши в логах"
>>> и какая, новая для меня, технология их создаёт? Уж не journald
>>> ли?
>>> И Вам спасибо.
>> Что вы имели ввиду под выражением "тагши в логах"?
> Извините, опечатался. "Таги" конечно. Строки в логах знаю, а кто такие "таги
> в логах" - нет. Даже гугль не помогает, duckduckgo с яндексом
> пишут про блоги. Неужели их можно grep-ать?

во всяком случае grep-ать получалось
1175:O:N 20140211-06:51:33:626 : 8:FIXT.1.1 9=390 35=8 49=PARFX 56=c3dc34=1175 52=20140211-06:51:33.626 37=1402110000000000187 11=49uEcD400000639 41=49uEcD400000633 453=1 448=client 447=B 452=17 17=1402110101000000026 150=F 39=2 64=20140213 55=US 54=2 38=26000000 40=2 423=3 44=477.24 59=1 32=17000000 31=477.24 336=3 151=0 14=26000000 6=482.698846 60=20140211-06:51:33.635 381=12550170000 1057=N 8780=user1 10=041 448


"Скрипт в командной строке Linux"
Отправлено Andrey Mitrofanov , 29-Июл-14 11:58 
> Нужно посчитать в логах количество строк, которые удовлетворяли бы таким значениям тэгов.
> (1057=Y & 54=1 & 150=F & (value of tag14)=(value of tag 32))
> Всё, кроме последнего условия получается считать с помощью grep.
> a5=`grep 1057=Y _1 *путь к файлам* |grep -c 54=2 |grep -c 150=F|`

* Ошибка: -c нужен только в последнем grep.

Файлов у меня нет, замегни : чем-н. типа cat файл1 файл2 файл3* |

$ : |awk 'func value_of_tag(tg,aa){return match($0,"(^| )"tg"=([^ ]+)( |$)",aa)?aa[2]:""}value_of_tag(1057)=="Y"&&value_of_tag(54)==1&&value_of_tag(150)=="F"&&value_of_tag(14)==value_of_tag(32){cc++}END{print int(cc)}'
0
$ _