awk的数组很神奇,我的感觉。
awk的数组可以使用数字当索引,可以使用字符串来当索引
1、使用数字做下标
info[1]="one"
info[2]="two"
info[3]="three"
[xiaomo@ArchLinux ~]$ echo ‘one two three‘ | awk ‘{info[1]=$1;info[2]=$2;info[3]=$3;print info[1],info[2],info[3]}‘
one two three
[xiaomo@ArchLinux ~]$
2、使用字符串(下标不加引号)做下标
info[one]="awk"
info[two]="sed"
info[three]="grep"
[xiaomo@ArchLinux ~]$ echo "awk sed grep" | awk ‘{info[one]=$1;info[two]=$2;info[three]=$3;print info[one],info[two],info[three]}‘
grep grep grep
[xiaomo@ArchLinux ~]$
看到它们之间的不同了吗?如果使用字符串(下标不加引号)做下标,只会保留最后一个下标的值。
3、使用字符串(下标加引号)做下标
info["one"]="awk"
info["two"]="sed"
info["three"]="grep"
[xiaomo@ArchLinux ~]$ echo "awk sed grep" |awk ‘{info["one"]=$1;info["two"]=$2;info["three"]=$3;print info["one"],info["two"],info["three"]}‘
awk sed grep
[xiaomo@ArchLinux ~]$
这次又不同了, 如果使用字符串(加上引号)做下标,结果都是单独保存下来了。
那么来看看下面的吧。
[xiaomo@ArchLinux ~]$ echo "awk sed grep ls" \
awk ‘{info["one"]=$1;info["two"]=$2;info["three"]=$3;info["three"]=$4;print info["one"],info["two"],info["three"],info["three"]}‘
awk sed ls ls
[xiaomo@ArchLinux ~]$
你是否已经晕了呢?
别着急,其实很简单而已。
使用字符串(不加引号)当下标,awk会把他们识别为相同的下标,所以只会保留最后一个下标的值。
使用字符串(加引号)当下标则相反,不会识别为相同的下标。但是呢,如果字符串(加引号)当下标,遇到相同的下标一样会只保留最后一个下标的值。
你是否看懂了?
不懂必须来找我。
本文出自 “小莫” 博客,请务必保留此出处http://xiaofengmo.blog.51cto.com/10116365/1750093
原文:http://xiaofengmo.blog.51cto.com/10116365/1750093