awk способ добавления чисел в поля строки

data.now:

blah1,dah,blaha,sweet,games.log,5297484456,nagios-toin,529748456,on__host=92 SERVICE__ALERT_=51 Warning___The__results__of__service=16 Warning___on__host=92 Auto_save__of__retention__data__completed=1 Warning___Return=68 PASSIVE__SERVICE__CHECK_=53 ,1026--1313,1
blah1,dah,blaha,sweet,games.log,5297484456,nagios-toin,529748456,on__host=14 SERVICE__ALERT_=51 Warning___The__results__of__service=16 Warning___on__host=93 Auto_save__of__retention__data__completed=1 Warning___Return=68 PASSIVE__SERVICE__CHECK_=53 ,1026--1313,1
blah1,dah,blaha,sweet,games.log,5297484456,nagios-toin,529748456,on__host=93 SERVICE__ALERT_=51 Warning___The__results__of__service=16 Warning___on__host=92 Auto_save__of__retention__data__completed=1 Warning___Return=8 PASSIVE__SERVICE__CHECK_=53 ,1026--1313,1
blah1,dah,blaha,sweet,games.log,5297484456,nagios-toin,529748456,on__host=73 SERVICE__ALERT_=51 Warning___The__results__of__service=16 Warning___on__host=99 Auto_save__of__retention__data__completed=1 Warning___Return=68 PASSIVE__SERVICE__CHECK_=53 ,1026--1313,1
blah1,dah,blaha,sweet,games.log,5297484456,nagios-toin,529748456,on__host=93 SERVICE__ALERT_=51 Warning___The__results__of__service=16 Warning___on__host=75 Auto_save__of__retention__data__completed=1 Warning___Return=38 PASSIVE__SERVICE__CHECK_=53 ,1026--1313,1
blah1,dah,blaha,sweet,games.log,5297484456,nagios-toin,529748456,on__host=21 SERVICE__ALERT_=51 Warning___The__results__of__service=16 Warning___on__host=12 Auto_save__of__retention__data__completed=1 Warning___Return=28 PASSIVE__SERVICE__CHECK_=23 ,1026--1313,1[/CODE]

Поля в каждой строке выше разделены запятой. Меня интересует поле 9.

Поле 9 имеет ряд значений.

Я хочу сделать две части:

  1. Уметь складывать все значения конкретного шаблона во все строки в файле данных.Например, если я хочу узнать общее значение «on__host» во всех строках файла данных.

  2. Уметь складывать все значения из всех шаблонов в каждой строке, во всех строках журнала.

Я работал со старыми данными, у которых было только одно значение в 9-м поле. с этим было легко справиться. Данные выглядели так:

data.prev

blah1,dah,blaha,sweet,games.log,5297484456,nagios-toin,529748456,53,1026--1313,1

И все, что мне нужно было сделать, чтобы сложить значения в 9-м поле всех строк, было:

awk -F, 'BEGIN{sum=0} {sum+=$9} END {print sum}' data.prev

Тип сценария, который решит эту проблему для меня будет выглядеть так:

#!/bin/sh
Pattern=$1
if [ "${Pattern}" = "allpatterns" ] ; then
   awk should add up all the values in the 9th field of data in data.now
else
   if the user did not specify "allpatterns", then, awk should take the pattern name specified by the user and use that to decide which pattern to add up in the 9th field of all the lines.
    awk -F"," '$9 ~ /'${Pattern}'/ '{do awk magic}'  -- this is just an idea.
fi

ожидается, что этот сценарий будет работать во всех системах unix. Я буду использовать оболочку / bin / sh или / bin / bash.

Для первой части моего запроса, если все значения всех шаблонов на всех строках в файле данных сложены, на выходе должна быть только результирующая сумма чисел ... т.е. 504 (просто произвольная номер, который я выбрал).

Для второй части моего запроса, если значения определенного шаблона складываются, на выходе должна быть только результирующая сумма значений для этого конкретного шаблона ... т.е. «on__host = 400».

0
15.10.2017, 16:51
0 ответов

Теги

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