В bash, как мне сложить все числа из столбца A, если столбец B имеет одинаковое содержимое? - PullRequest
3 голосов
/ 05 декабря 2011

Мой стол выглядит примерно так:

11 wordA  
16 wordB 
17 wordC 
24 wordA 
25 wordB

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

35 wordA
41 wordB
17 wordC

Помощь очень ценится!

(P.S. Есть ли способ сделать это с помощью awk?)

Ответы [ 3 ]

7 голосов
/ 05 декабря 2011

Это довольно типичная проблема awk.Сценарий awk для этого будет выглядеть примерно так:

{ totals[$2] += $1 }

END {
  for (i in totals)
    print totals[i], i
}

В первом разделе создается итоговый ассоциативный массив, основанный на втором столбце.Затем блок END перебирает массив и печатает итог.

1 голос
/ 05 декабря 2011

В Bash 4 (с ассоциативными массивами):

declare -A seen
while read -r num word
do
    [[ $word ]] && (( seen["$word"] += num ))
done < <(printf '%s\n' "${table[@]}")

for word in "${!seen[@]}"
do
    printf '%d %s\n' "${seen["$word"]}" "$word"
done

Вы можете заменить <(printf '%s\n' "${table[@]}") на <(some_command) или filename в зависимости от ваших потребностей.

0 голосов
/ 05 декабря 2011

труба до

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