Выбор одного значения в строке - awk - PullRequest
2 голосов
/ 06 мая 2011

У меня есть файл в формате:

10.0.0.1        87.220.150.64   131
10.0.0.1        87.220.172.219  131
10.0.0.1        87.220.74.162   131
10.0.0.1        87.220.83.17    58
10.0.0.1        87.220.83.17    58
1.160.138.209   10.0.0.249      177
1.160.138.209   10.0.0.249      354
1.160.138.249   10.0.0.124      296
1.160.139.125   10.0.0.252      129
1.160.139.207   10.0.0.142      46

Первый и второй столбцы - это IP-адреса, а третий - байты, передаваемые между IP-адресами. Я должен посчитать, сколько байтов отправляет или получает каждый 10-й IP-адрес.

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

awk '{ a[$1 " " $2] += $3 } END { for (i in a) { print i " " a[i] } }' input.txt | sort -n

Ответы [ 2 ]

3 голосов
/ 06 мая 2011

Это не делает различий между отправленными байтами и полученными байтами.

# bytes-txrx.awk -- print bytes sent or received by each 10.* ip address.
# Does not guard against overflow.
#
# Input file format:
# 10.0.0.1        87.220.150.64   131
# 10.0.0.1        87.220.172.219  131
# 10.0.0.1        87.220.74.162   131
# 10.0.0.1        87.220.83.17    58
# 10.0.0.1        87.220.83.17    58
# 1.160.138.209   10.0.0.249      177
# 1.160.138.209   10.0.0.249      354
# 1.160.138.249   10.0.0.124      296
# 1.160.139.125   10.0.0.252      129
# 1.160.139.207   10.0.0.142      46
#
$1 ~ /^10\./ {a[$1] += $3;}
$2 ~ /^10\./ {a[$2] += $3;}
END {
  for (key in a) {
    print key, a[key];
  }
}

$ awk -f test.awk test.dat
10.0.0.1 509
10.0.0.252 129
10.0.0.249 531
10.0.0.142 46
10.0.0.124 296
0 голосов
/ 06 мая 2011

Просто сортируйте по столбцу 2, и у вас есть:

$ awk '{ a[$1 " " $2] += $3 } END { for (i in a) { print i " " a[i] } }' input.txt | sort -n -k 2

Но ваше описание не соответствует расчету.Вы не рассчитываете, сколько IP отправляет.Вы вычисляете, сколько отправляется от А до Б. И сумма А отправляет его так же, как получает Б.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...