Я пытаюсь добавить значения в столбце B на основе уникального значения в столбце A. Как я могу сделать это с помощью AWK (или) любым другим способом, используя bash?
Column_A | Column_B -------------------- A | 1 A | 2 A | 1 B | 3 B | 8 C | 5 C | 8
Результат:
Column_A | Column_B -------------------- A | 6 B | 11 C | 13
Одно из возможных решений (Предполагается, что файл в формате CSV):
Ввод:
$ cat csvtest.csv A,1 A,2 A,3 B,3 B,8 C,5 C,8
$ cat csvtest.csv | awk -F "," '{arr[$1]+=$2} END {for (i in arr) {print i","arr[i]}}' A,6 B,11 C,13
еще awk
awk
$ awk 'NR<3 {print; next} {a[$1]+=$NF; line[$1]=$0} END {for(k in a) {sub(/[0-9]+$/,a[k],line[k]); print line[k]}}' file Column_A | Column_B -------------------- A | 4 B | 11 C | 13
обратите внимание, что А составляет 4, а не 6.
Учитывая, что ваш Input_file такой же, как показано, отсортированный по первому полю, пожалуйста, попробуйте выполнить следующее (отредактируете решение для выравнивания слишком рано).
awk ' BEGIN{ OFS=" | " } FNR==1 || /^-/{ print next } prev!=$1 && prev{ print prev,sum prev=sum="" } { sum+=$NF prev=$1 } END{ if(prev && sum){ print prev,sum } }' Input_file