0

我正在尝试根据 A 列中的唯一值在 B 列中添加值。我如何使用 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
4

3 回答 3

0

其他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

请注意,A 总计为 4,而不是 6。

于 2018-08-29T19:32:13.847 回答
0

考虑到您的 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
于 2018-08-29T15:02:10.173 回答
-1

一种可能的解决方案(假设文件为 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
于 2018-08-29T15:04:52.350 回答