我有类似的输入
A 3
C 1
A 4
B 2
B 2
output should be
A total=7 (3+4)
C total=1 (1)
B total=4 (2+2)
任何人都可以告诉我如何在awk中这样做吗? 输入是awk行输出的一部分,因此请求awk中的解决方案。 谢谢!
答案 0 :(得分:1)
我想建议另一种方式:
sort -k 1,1 your_file |
cat - <(echo "") |
gawk '
$1==key {
line=line " + " $2; sum+=$2
}
$1 != key {
if (NR>1){print key " total=" sum " (" line ")"}
key=$1
line=$2
sum=$2
}'
有什么区别?
1)这个awk不使用数组。这在处理大文件时很重要。
2)这更像是AWK方式,而之前的答案更像是编程语言方式。
3)如果原始订单很重要,你可以这样做:
gawk '{print $0 " " NR}' your_file |
sort -k 1,1 | cat - <(echo "") |
gawk '$1==key {line=line " + " $2; sum+=$2} $1 != key {if (NR>1){print nr " " key " total=" sum " (" line ")"}; key=$1; line=$2; sum=$2; nr=$NF}' |
sort -k 1,1n |
cut -d \ -f 2-
答案 1 :(得分:0)
您可以尝试以下代码:
awk '
{
a[$1]+=$2
b[$1]=(b[$1]=="")?$2:(b[$1]"+"$2)
}
END {
for (i in a)
print i" total="a[i]" ("b[i]")"
}' file
带输出:
A total=7 (3+4)
B total=4 (2+2)
C total=1 (1)