Объединить списки частот с awk

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

Итак, вот что я пытался сделать в cygwin:

Я собрал несколько рекомендаций, которые нашел в Интернете, и в итоге использовал sort uniq и awk, которые показались мне полезными. Я пробовал несколько вещей, но покажу вам только первое и последнее:

sort testcf.txt | uniq -c  | awk '{  print $2 + $3 "\t" $1 }' > testcf-sorted.txt

...

sort testcf.txt | uniq -c  | awk '{  print $2 "\t" $1 }' > testcf-sorted.txt

Список выглядит так:

foo 1
bar 3
foo 2
fnord 2
foo 1
fnord 2

Я хочу получить:

bar 3
fnord 4
foo 4

но я получаю:

первый подход:

3   1
2   1
2   1
1   2
2   1

Последний подход:

bar 1
fnord   1
fnord   1
foo 2
foo 1

person Largo    schedule 18.07.2014    source источник


Ответы (1)


Если вы используете sort и uniq и ваш ввод дважды содержит «foo 1», то один из них будет потерян. Я думаю, вы просто ищете:

awk '{a[$1] += $2} END {for( i in a ) print i, a[i]}' testcf.txt
person William Pursell    schedule 18.07.2014
comment
Возможно с сортировкой потом. - person ooga; 18.07.2014