BEGIN{
sum1=0;
sum2=0;
cnt1=0;
cnt2=0;
}
{
if ($2 == 1) {
sum1=sum1+$1;
cnt1++;
} else if ($2 == 2) {
sum2=sum2+$1;
cnt2++;
}
}
END {
print cnt1" "cnt2;
print sum1" "sum2;
}说明:按照某列的值进行分组求和。
注意:
- awk脚本中中间代码块本身就是是对文件中每行都进行处理,需要使用while(i<NF)进行重复判断!
- 此文件命名为abc.awk 则执行方式是awk -f abc.awk data
- 如果awk文件不复杂,建议直接用awk命令行执行,如
- awk -F ' ' 'BEGIN{ sum1=0;sum2=0;cnt1=0;cnt2=0;} {if($2==1) { sum1=sum1+$1;} else if ($2==2) { sum2=sum2+$1; } } END{ print sum1" "sum2;}' data
awk脚本中常量
NF 当前记录的字段数
NR
awk流程控制语句,从语法上可以看到,与c语言是一样的。有了这些语句,其实很多shell程序都可以交给awk,而且性能是非常快。
比较 time (awk 'BEGIN{ total=0;for(i=0;i<=10000;i++){total+=i;}print total;}') 和 time(total=0;for i in $(seq 10000);do total=$(($total+i));done;echo $total;)
参考
http://www.cnblogs.com/chengmo/archive/2010/10/04/1842073.html
http://www.cnblogs.com/mywolrd/archive/2012/04/27/2472916.html
本文介绍了一个具体的awk脚本实例,演示了如何根据文件中特定列的值进行分组并计算各组的总和。通过这个例子,读者可以了解awk的基本用法,包括变量赋值、条件判断及流程控制等。

被折叠的 条评论
为什么被折叠?



