当前位置: 技术问答>linux和unix
帮忙解释一下一个AWK语句,谢谢
来源: 互联网 发布时间:2016-04-10
本文导语: 对于数据文件如: abc 10 def 28 abc 2 abc 20 可以使用脚本: awk ' { arr[$1]=arr[$1]+$2 } END { for( key in arr) { print key , arr[key] } } ' filename 来对不同的行计算group sum. 请问这个语句怎么理解呢?请具体给出每部分...
对于数据文件如:
abc 10
def 28
abc 2
abc 20
可以使用脚本:
awk ' { arr[$1]=arr[$1]+$2 } END { for( key in arr) { print key , arr[key] } } ' filename
来对不同的行计算group sum.
请问这个语句怎么理解呢?请具体给出每部分的作用,谢谢了.
abc 10
def 28
abc 2
abc 20
可以使用脚本:
awk ' { arr[$1]=arr[$1]+$2 } END { for( key in arr) { print key , arr[key] } } ' filename
来对不同的行计算group sum.
请问这个语句怎么理解呢?请具体给出每部分的作用,谢谢了.
|
awk --- 执行程序
'BEGIN{...}{...}END{...}' --- 引号内一般有三块, BEGIN, 中间, END, 你的程序省了BEGIN(一般做初始化操作).
中间的那块,每读到文件的一行都执行一次.
{arr[$1]=arr[$1]+$2},$1表示一行中的第一栏,分隔符为空格,在你的例子中,abc, def等都是第一栏. $2是第二栏.
这句语句,在你的例子中,相当于:
arr['abc'] = arr['abc'] + 10
...
所以相当于把所有累加.
END后面就把它全部输出.
'BEGIN{...}{...}END{...}' --- 引号内一般有三块, BEGIN, 中间, END, 你的程序省了BEGIN(一般做初始化操作).
中间的那块,每读到文件的一行都执行一次.
{arr[$1]=arr[$1]+$2},$1表示一行中的第一栏,分隔符为空格,在你的例子中,abc, def等都是第一栏. $2是第二栏.
这句语句,在你的例子中,相当于:
arr['abc'] = arr['abc'] + 10
...
所以相当于把所有累加.
END后面就把它全部输出.