原文:Shell:使用awk对列数据求和
博客:http://www.changmeng.top/
举例两个例子:
- 对某一列进行求和
- 对某一列相同字段进行求和
对某一列进行求和
测试数据
在test01.txt
里写入测试数据。
echo "10,20,30" >> test01.txt
echo "40,50,60" >> test01.txt
echo "70,80,90" >> test01.txt
代码
这个文件有三行,每行有三个字段,用逗号分隔。如果我们想要计算第三列的和,也就是30+60+90=180。我们可以使用以下awk命令:
awk -F',' '{sum+=$3} END {print sum}' test01.txt
• -F’,':指定逗号为字段分隔符。
• {sum+=$3}:对每一行,将第三个字段的值累加到变量sum中。
• END {print sum}:在处理完所有行后,打印变量sum的值。
拓展示例
如果我们想要计算其他列的和,或者使用其他分隔符,我们只需要修改相应的参数即可。例如,如果我们想要计算第二列的和,也就是20+50+80=150,我们可以使用以下命令:
awk -F',' ' {sum+=$2} END {print sum}' test01.txt
对某一列相同字段进行求和
测试数据
在test02.txt
里写入测试数据。
echo "apple,10
banana,20
orange,30
apple,15
banana,25
orange,35" > test02.txt
代码
这个文件有六行,每行有两个字段,用逗号分隔。我们想要计算第一列相同字段的第二列的和,也就是apple的10+15=25,banana的20+25=45,orange的30+35=65。我们可以使用以下awk命令:
awk -F',' '{sum[$1]+=$2} END {for (i in sum) print i, sum[i]}' test02.txt
• -F’,':指定逗号为字段分隔符。
• {sum[$1]+=$2}:对每一行,将第二个字段的值累加到以第一个字段为键的数组sum中。
• END {for (i in sum) print i, sum[i]}:在处理完所有行后,遍历数组sum,并打印每个键和对应的值。
拓展示例
如果我们想要计算其他列相同字段的和,或者使用其他分隔符,我们只需要修改相应的参数即可。例如,如果我们想要计算第二列相同字段的第一列的和,我们可以使用以下命令:
awk -F',' '{sum[$2]+=$1} END {for (i in sum) print i, sum[i]}' test03.txt