linux入门之awk和shell变量传递

一、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[@]}

你可能感兴趣的:(shell)