Как добавить значения столбца на основе уникального значения другого столбца - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь добавить значения в столбце 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

Ответы [ 3 ]

0 голосов
/ 29 августа 2018

Одно из возможных решений (Предполагается, что файл в формате 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
0 голосов
/ 29 августа 2018

еще 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.

0 голосов
/ 29 августа 2018

Учитывая, что ваш 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...