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[@]}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值