如何在awk中初始化数组
1个回答
展开全部
awk的数组其实很好理解。一般编程语言的数组,其下标只能是数字,比如a[3],表示数组a的第四个元素。
但是awk的不同,其下标可以是任意字符或者字符串。比如a[bob],表示数组a的一个元素,它的下标是"bob"。
比如有个文本文件alex.txt:
a 1
b 2
c 3
a 4
b 5
a 6
如果我们想统计以a开头的行后面的数字之和,就是“1+4+6”,我们用awk怎么做呢:
cat alex.txt | awk ‘{if(!array[$1]) {array[$1]=$2;}
elae{arrary[$1]=array[$1]+$2;}}END{print array[a];}’
命令中有个数组array,当读取alex.txt第一行时,$1是“a”,array[a]刚开始是“”(空字符串),所以!array[a]就为真,那么array[a]=1,数组array就有了第一个元素array[a].
同理,读取第二行之后结果array[a]=1, array[b]=2,数组array就有了2个元素。
第三行之后结果是array[a]=1, array[b]=2, array[c]=3,数组array就有了3个元素。
第四行之后结果是array[a]=5(1+4,4为第四行的$2), array[b]=2, array[c]=3
第五行之后结果是array[a]=5, array[b]=7, array[c]=3
第六行之后结果是array[a]=11, array[b]=7, array[c]=3
END的意思是读取完文件所有行后执行的语句,打印出数组第一个元素array[a].
但是awk的不同,其下标可以是任意字符或者字符串。比如a[bob],表示数组a的一个元素,它的下标是"bob"。
比如有个文本文件alex.txt:
a 1
b 2
c 3
a 4
b 5
a 6
如果我们想统计以a开头的行后面的数字之和,就是“1+4+6”,我们用awk怎么做呢:
cat alex.txt | awk ‘{if(!array[$1]) {array[$1]=$2;}
elae{arrary[$1]=array[$1]+$2;}}END{print array[a];}’
命令中有个数组array,当读取alex.txt第一行时,$1是“a”,array[a]刚开始是“”(空字符串),所以!array[a]就为真,那么array[a]=1,数组array就有了第一个元素array[a].
同理,读取第二行之后结果array[a]=1, array[b]=2,数组array就有了2个元素。
第三行之后结果是array[a]=1, array[b]=2, array[c]=3,数组array就有了3个元素。
第四行之后结果是array[a]=5(1+4,4为第四行的$2), array[b]=2, array[c]=3
第五行之后结果是array[a]=5, array[b]=7, array[c]=3
第六行之后结果是array[a]=11, array[b]=7, array[c]=3
END的意思是读取完文件所有行后执行的语句,打印出数组第一个元素array[a].
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询