使用awk计算、求和并打印总值
我想知道如何根据使用awk计算、求和并打印总值,awk,Awk,我想知道如何根据第一个字段($1)和第二个字段($2)的组合来计算行项目、合计项目并最终打印总数 我目前能够执行以下步骤 Input.csv mmmm,aa123aa,11,www pppp,bb456bb,40,www mmmm,aa123aa,33,www pppp,bb456bb,20,www xxxx,cc789cc,88,www mmmm,aa123aa,22,www pppp,bb456bb,60,www mmmm,aa123aa,44,www xxxx,cc789cc,88,www
第一个字段($1)和第二个字段($2)
的组合来计算行项目、合计项目并最终打印总数
我目前能够执行以下步骤
Input.csv
mmmm,aa123aa,11,www
pppp,bb456bb,40,www
mmmm,aa123aa,33,www
pppp,bb456bb,20,www
xxxx,cc789cc,88,www
mmmm,aa123aa,22,www
pppp,bb456bb,60,www
mmmm,aa123aa,44,www
xxxx,cc789cc,88,www
第1步:
输出#1:
Op11_Input.csv
xxxx,cc789cc,2,176
mmmm,aa123aa,4,110
pppp,bb456bb,3,120
第2步:
有没有最简单的方法,例如一行命令,来避免步骤2
期望输出:
xxxx,cc789cc,2,176
mmmm,aa123aa,4,110
pppp,bb456bb,3,120
0,0,9,406
我在寻找你的建议 你可以说:
awk 'BEGIN{FS=OFS=","}
{key=$1 FS $2; ++a[key]; b[key]+=$3}
END {
for(i in a) {print i, a[i], b[i]
tot+=a[i]; stot+=b[i]}
print tot, stot}' file
注意,您正在使用,
以及定义FS
。我将它改为始终使用FS
和OFS
。另外,为第一个和第二个字段添加字段没有意义(它输出0
),所以我跳过了它
作为一个班轮:
$ awk 'BEGIN{FS=OFS=","} {key=$1 FS $2; ++a[key]; b[key]+=$3} END {for(i in a) {print i, a[i], b[i]; tot+=a[i]; stot+=b[i]} print tot, stot}' file
xxxx,cc789cc,2,176
mmmm,aa123aa,4,110
pppp,bb456bb,3,120
9,406
更简短的():
感谢Fedorqui,我为第一和第二输出0添加了字段,以保持格式不变,在将输出转换和分析为Excel时,它将设置在正确的字段位置!!!非常感谢Fedorqui的快速响应,已经接受并投票表决了答案!!!你能不能不打印
NR
而直接打印stot
?例如awk-F,{key=$1fs$2;a[key]++;b[key]+=$3;c+=$3}END{用于(a中的i)打印i”,“a[i]”,“b[i];print NR”,“c}'
@Jidder<代码>awk'BEGIN{FS=OFS=“,”}{key=$1fs$2;a[key]++;b[key]+=$3;c+=$3}END{对于(a中的i)打印i,a[i],b[i];打印0,0,NR,c}文件很好,这一点很好。也用这个版本编辑,谢谢@AVNNR
指记录的数量。所以第一行是1
,第二行是2
,依此类推。。。因此,它包含END
块中最后一行的编号,因此可以使用它来显示文件包含的行数。
xxxx,cc789cc,2,176
mmmm,aa123aa,4,110
pppp,bb456bb,3,120
0,0,9,406
awk 'BEGIN{FS=OFS=","}
{key=$1 FS $2; ++a[key]; b[key]+=$3}
END {
for(i in a) {print i, a[i], b[i]
tot+=a[i]; stot+=b[i]}
print tot, stot}' file
$ awk 'BEGIN{FS=OFS=","} {key=$1 FS $2; ++a[key]; b[key]+=$3} END {for(i in a) {print i, a[i], b[i]; tot+=a[i]; stot+=b[i]} print tot, stot}' file
xxxx,cc789cc,2,176
mmmm,aa123aa,4,110
pppp,bb456bb,3,120
9,406
awk 'BEGIN {FS=OFS=","}
{key=$1 FS $2;a[key]++;b[key]+=$3;c+=$3}
END{for(i in a)print i, a[i], b[i]; print 0, 0, NR,c}' file