Распечатайте уникальные слова, общее количество случаев и суммы с помощью 'awk'

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

Я использую awk как:

awk -F, '{sum[$1]+=$2} END{for (x in sum) print x, sum[x]}' inFile

Я могу изменить команду выше для печати общего количества случаев уникальных слов также? Что-то как ниже результата для следующего демонстрационного входа:

Результат (порядок печатных результатов не имеет значения):

A 2 25 
B 1 12 
C 3 18

Вход:

A,15
C,13
C,4
A,10
B,12
C,1

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

Есть ли любой индекс массива sum который хранит общие замеченные слова?

2
задан 3 January 2016 в 21:00

2 ответа

Это должно сделать:

awk -F, '{x[$1]["count"]++;x[$1]["sum"]+=$2}END{for(y in x){print y,x[y]["count"],x[y]["sum"]}}' in

В основном Вы заменяете массив многомерным массивом для хранения и количества происшествий каждого уникального первого поля и суммы их относительных вторых полей.

% cat in
A,15
C,13
C,4
A,10
B,12
C,1
% awk -F, '{x[$1]["count"]++;x[$1]["sum"]+=$2}END{for(y in x){print y,x[y]["count"],x[y]["sum"]}}' in
A 2 25
B 1 12
C 3 18
2
ответ дан 2 December 2019 в 01:36

Нет, нет такого индекса. Значения массива не проводят подсчет того, сколько раз они были увеличены. Самая естественная вещь сделать здесь состоит в том, чтобы использовать второй массив:

$ awk -F, '{sum[$1]+=$2;seen[$1]++} END{for(x in sum) print x,seen[x],sum[x]}' file
A 2 25
B 1 12
C 3 18

Можно также использовать двумерную матрицу как показано в ответе Коса, но, как Вы видите, это действительно не упрощает вещи всегда. С другой стороны, Вы могли использовать некоторое волшебство жемчуга:

$ perl -F, -lane 'push @{$k{$F[0]}},${$k{$F[0]}}[-1]+$F[1]; 
            END{print "$_ ",$#{$k{$_}}+1," ${$k{$_}}[-1]" for keys(%k)}' file
C 3 18
B 1 12
A 2 25

Нет, это не шум в линии и да, он использует единый массив для печати всего.

5
ответ дан 2 December 2019 в 01:36

Другие вопросы по тегам:

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