Суммирование чисел на основе слова с использованием awk - PullRequest
1 голос
/ 20 июля 2011

Есть несколько строк предложений, и они находятся в одном из этих выходов.

[%d][%d] msg_sent = %result

[%d][%d] msg_sent_node number = %result2

где% d, $ result и $ result2 - это числа.

Эти строки расположены в случайном порядке.

Я хочу суммировать все числа в% result и% result2, чтобы в конце он напечатал 2 числа (Первое - это сумма всех чисел в% result, а второе - сумма всех чисел в Формат% result2.)

Например, если файл состоит из 4 строк

[1][1] msg_sent = 5000
[1][2] msg_sent = 6000
[1][2] msg_sent_node number = 100
[1][1] msg_sent_node number = 200

Я хочу, чтобы 2 выходных числа были 11000 и 300.

Как я могу сделать это с помощью awk?

Ответы [ 2 ]

3 голосов
/ 20 июля 2011
awk '/msg_sent_node number/ { node_total += $5  } /msg_sent / { sent_total = sent_total + $4} END { print sent_total " " node_total }'

, что, вероятно, легче понять, если написать так:

/msg_sent_node number/ { node_total += $5 } 
/msg_sent / { sent_total += $4} 
END { print sent_total " " node_total }
0 голосов
/ 20 июля 2011

Очень простой и не очень общий скрипт для этого будет выглядеть следующим образом:

awk '{ if ($3 == "number") { b += $5 } else { a += $4 } } END { print a " " b }' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...