счетчик внутри оператора awk - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь получить количество вхождений текста в файл. для этого я использовал следующую команду:

grep FAIL $sPath/FTM.FC*$yesterday* |awk -F ":" '{print $7}' | awk '{print $1}' |awk '{if ($1 == "userNotReachable"){cnt++;} ;{print cnt}  };'

в первой части:

 grep FAIL $sPath/FTM.FC*$yesterday* |awk -F ":" '{print $7}' | awk '{print $1}'

Я фильтрую вывод, чтобы получить только один столбец .. затем я проверяю, равен ли этот столбец искомому тексту " userNotReachable ", если true, тогда увеличьте счетчик, позже я хочу напечатать значение счетчика в текстовый файл

Вот пример содержимого исходного файла, это журналы ошибок:

2019-01-03 19:29:59.923 FAIL RETRY: Failed for request id: 14899507 Cause: userNotReachable Info: <undef> Code: 27,USSD RequestId=14899507 OriginalId=14899507 EventCorrelationId="1211005491|245065451||1546527554000" CreationTime="20190103192959" ResendCount=0 Timestamp=1546527599482 (Thu Jan 03 19:29:59 AFT 2019) State=STATE_SENT SubscriberNumber=708023643 UssdText=Last event was charged 0.04 MB from 1GB Monthly, Remaining data 421.95 MB (Exp 12.01.2019)1500 AFS = 32GB valid 30 Days, Dial *477*32*1#. NumberingPlan=1 Nadi=4 UssdFormat=2

Я хочу получить счетчик нескольких причин ошибок, таких как:

userNotReachable
unknown
equipmentFailure
timeout
userBusy
userNotReachable
userUnavailable 

и распечатать счет каждой ошибки в текстовый файл

1 Ответ

0 голосов
/ 03 января 2019

Вы, кажется, делаете много труб здесь.Вы можете просто сделать это с помощью одного awk:

awk -F ":" '/FAIL/ && ($6 ~ / *userNotReachable /) {c++}END{print c}' $sPath/FTM.FC*$yesterday*

После обновления вы можете сделать это:

awk '/FAIL/ { match($0,/ Cause: /); n=RSTART+RLENGTH;
              match(substr($0,n)," "); a[substr($0, n,RSTART-1)]++}
     END{for(i in a) print i, a[i]}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...