您的位置:首页 > 运维架构 > Shell

linux入门之awk和shell变量传递

2013-08-03 16:50 691 查看
一、awk使用shell中的普通变量

方法1:使用引号法

aa="hello"

awk 'BEGIN {print "$aa"}'

输出$aa

awk 'BEGIN {print "'$aa'"}'

输出hello

awk 'BEGIN {print ""$aa""}'

输出空

aa="hello! coder"

awk 'BEGIN {print "'$aa'"}'

报错,双引号没配对,因为中间出现空格

awk 'BEGIN {print "'"$aa"'"}'

能正常显示hello! coder

方法2:使用-v法

awk -v varaa="$aa" 'BEGIN {print varaa}'

awk -v varaa=$aa 'BEGIN {print varaa}'

能正常显示,-v还是比较方便的,比较清晰

方法3:通过环境变量

aa="this is a test";export aa

awk 'BEGIN{print ENVIRON["aa"]}'

正常

注意设置环境变量的时候是export aa而不是export $aa

方法4:使用awk 'script' awkvar="shellvar" filename

aa="this is a test";export aa

awk 'END{print bb}' bb="$aa" a.txt

当把END改为BEGIN的时候就不能使用了

二、awk中使用shell的数组变量

aa=(a b c d e)

awk -v bb="$aa" 'BEGIN{print bb}'

只能输出a,估计是数组aa的第一个成员

aa=(a b c d e)

awk -v bb="$aa" 'BEGIN{for(i in bb) print bb[i]}'

报错

提示bb不是一个数组

aa=(a b c d e)

awk -v bb="${aa[*]}" 'BEGIN{split(bb,A," ");for(i in A) print i"---"A[i]}'

三、shell中使用awk中的数组

注意:shell中的数组是非关联数组,下标只能是数字,而awk中的数组是关联数组,下标可以是字符串

awk 在BEGIN中定义的变量名称居然不能叫index

eval $(awk 'BEGIN {xiabiao=0} {aa[$1]=$2} END{for(i in aa) {print "aa["xiabiao"]="aa[i];xiabiao+=1}}' a.txt)

echo ${#aa[@]}

echo ${aa[@]}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: