kerrigan007 发表于 2018-10-12 18:46

AWK累加问题


举个例子,比如下面这个test文件,我想把第二列每3行累加一次:
# cat test
a1
b2
c3
d4
e5
f6

那我写成这样是可以实现的,每3行累加,输出结果:
# awk '{sum+=$2;if(NR%3==0){print $1,sum;sum=0}}' test
c 6
f 15


但是如果文件行数不是3的倍数改怎么办?
# cat test
a1
b2
c3
d4
e5
f6
g7
h8

比如上面这个8行的文件我想输出成以下这样,最后多余行直接累加并输出:
c 6
f 15
g 15


csccyab 发表于 2018-10-12 21:35

你想最后一行輸出是 g 15,還是 h 15

$ awk '{sum+=$2;if(NR%3==0){print $1,sum;sum=0}} END{print $1,sum}' test
c 6
f 15
h 15

$ awk '{sum+=$2; c=$1; if(NR%3==0){print $1,sum;sum=0;c=$1}} END{print c,sum}' test
c 6
f 15
g 15

kerrigan007 发表于 2018-10-13 10:35

h 15,多谢了

LikeLx 发表于 2018-10-15 15:21

awk '{b+=$2}NR%3==0{print $1,b;b=0}END{if(NR%3!=0)print $1,b}'

a5love3n 发表于 2021-07-30 14:03

本帖最后由 a5love3n 于 2021-09-24 16:16 编辑

awk '{sum=$2;for(i=0;i<2;i++){if((getline)>0){sum+=$2}}{print $1" "sum}}' test
页: [1]
查看完整版本: AWK累加问题