команда awk, которая не работает должным образом - PullRequest
1 голос
/ 23 апреля 2011

У меня есть файл ввода, как показано ниже:

-4.0,vijay
-2.0,chan
-3.0,vijay

, и моя команда:

 awk -F, '{a[$2]=a[$2]+$1}{for (i in a) print i","a[i]}'

Я ожидаю

vijay,-7.0
chan,-2.0

фактический вывод

vijay -4
vijay -4
chan -2
vijay -7
chan -2

Ответы [ 3 ]

1 голос
/ 23 апреля 2011

Попробуйте:

awk -F, '{arr[$2]+=$1}END{for(i in arr)print i,",",arr[i]}'
1 голос
/ 23 апреля 2011

Похоже, вам нужно сохранить отпечаток, пока все строки не будут обработаны.

'{a[$2]=a[$2]+$1}END{for (i in a) print i","a[i]}'

Также попробуйте printf, чтобы получить запятую в нужном месте.

0 голосов
/ 23 апреля 2011

Вам необходимо напечатать массив в блоке END, иначе ваш цикл for начнет печатать для каждой итерированной записи.

awk -F, '{a[$2]+=$1}END{for (i in a) print i","a[i]}' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...