linux awk 计算合计值

命令调用 : awk -f command.awk -F “,” -v key1=1,2 -v sumItem=4 awk_test.txt > sum.txt
说明:
1.-f command.awk 脚本文件
2.-F “,” 文本分割符号
3.-v key1=1,2 传参,key1=1,2 区分的key是第1个字段和第二个字段,如果只有一个不写“,”
如果是多个字段组合,就写列号,并用“,”隔开。
4.-v sumItem=4 传参 需要合计的字段,只能指定一个
5.awk_test.txt 需要处理的文件名
6.sum.txt处理完的文件名
以第1,2字段为key,合计第4个字段:
输入:
1,Amit,A,80,ss
1,Amit,B,80,ff
输出:
1,Amit,B,160,ff

例:
输入文件内容:

1,Amit,A,80,ss
1,Amit,B,80,ff
2,Rahul,C,90,ds
3,Shyam,D,87,fr
4,Kedar,E,85,dd
5,Hari,F,89,12
5,Hari,F,1,12
6,Kedar,G,85,dd

输出文件内容:

1,Amit,B,160,ff
2,Rahul,C,90,ds
3,Shyam,D,87,fr
4,Kedar,E,85,dd
5,Hari,F,90,12
6,Kedar,G,85,dd

文件 command.awk:

#awk -f command.awk -F "," -v key1=1,2 -v sumItem=4 awk_test.txt > sum.txt
# BEGIN block(s)
BEGIN {
    #kubuKeyArym 合计列Index数组  key1 传入参数
    split(key1,kubuKeyArym,",")
    # sumItem  合计列index
    #记录合计key的数组
    sumKeyAry[0] = ""
	
    #记录每一行除过合计item的列的值
    linAry[0] = ""
	
    #记录合计值
    sumValueAry[0] = ""
	
    #key相同的行号数组
    keyIndexAry[0] = 0
	
    #NR 当前记录数。相当于行号
    #NF 当前记录中的字段数。
	#key相同的count数
	keyCount = 0
	#FS 域分隔符
}

# Rule(s)
{
    #print "NR,NF = " NR","NF
    linKey = ""
    for(x in kubuKeyArym){
        linKey = linKey "," $kubuKeyArym[x];
    }
    
    if(sumKeyAry[keyCount] == linKey){
        sumValueAry[keyCount] += $sumItem;
    }else{
        keyCount++;
        sumKeyAry[keyCount] = linKey;
        sumValueAry[keyCount] = $sumItem;
    }
	#NF 当前记录中的字段数。
	#print (" NF = "NF)
    for(i=1;i<=NF;i++){
		if(sumItem!=i){
			linAry[keyCount] = i==1 ? $i : linAry[keyCount] FS $i;
		}else{
			linAry[keyCount] = i==1 ? sumValueAry[keyCount] :linAry[keyCount] FS sumValueAry[keyCount];
		}
	}
	
}

# END block(s)
END {
	for (i=1;i<=keyCount;i++){
		print linAry[i];
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

whl826661099

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值