我正在尝试根据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
答案 0 :(得分: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
答案 1 :(得分: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。
答案 2 :(得分:-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