awk使用shell变量及shell使用awk中的变量


在写shell脚本时,经常会使用到awk程序。但是有些复杂的逻辑,可能需要在awk中使用在shell中定义的变量,而且awk程序处理之后,产生的中间变量,还需要在shell中继续处理。


一、那如何在awk中使用在shell中定义的变量呢?

方法一:使用"'把shell变量包起来,即"'$var'";注意是“双引号+单引号+shell变量+单引号+双引号”的格式。

这种写法大家无需改变用'括起awk程序的习惯,是老外常用的写法;这种写法其实际是双括号变为单括号的常量,传递给了awk.

例如:

var="abc"

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


方法二:和方法一类似,但使用"'"把shell变量包起来,即"'"$var"'";注意是“双引号+单引号+双引号+shell变量+双引号+单引号+双引号”的格式。

如果变量的值中包含空格,为了shell不把空格作为分隔符,则应使用方法二。

例如:

var="this a test"

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


方法三:export变量,然后在awk中使用ENVIRON["var"]形式获取环境变量的值

例如:

var="this a test"; export var;

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



方法四:使用awk -v选项;

当变量不是很多时,建议使用这种方式。

例如:

var="this a test"

awk -v awkVar="$var" 'BEGIN{print awkVar}'


二、那shell中如何使用awk程序中定义的变量呢?

“由awk向shell传递变量”,其思想无非是用awk(sed/perl等也是一样)输出若干条shell命令,然后再用shell去执行这些命令。

例如:

eval $(awk 'BEGIN{print "var1='str1';var2='str2'"}')
或者eval $(awk '{printf("var1=%s; var2=%s; var3=%s;",$1,$2,$3)}' abc.txt)


之后可以在当前shell中使用var1,var2等变量了。
echo "var1=$var1 ----- var2=$var2"


三、一个检测磁盘空间使用情况的脚本的例子

#!/bin/sh
#文件系统名字
FILE_SYSTEM_NAME="rootfs"

#文件系统挂在的目录
MOUNTED_ON="/"

# shell命令使用awk中定义的变量spaceSize
eval $(df -P | awk '$1=="'"$FILE_SYSTEM_NAME"'" && $6=="'$MOUNTED_ON'" {printf("spaceSize=%s;",$5)}')
echo "主磁盘的使用空间为$spaceSize"

spaceSize=`echo $spaceSize | cut -d% -f1`
if [ aa$spaceSize = "aa" ]; then
    spaceSize=-1
fi

if [ $spaceSize -le 85 ]; then
    echo '主磁盘的使用空间充足'
elif [ $spaceSize -eq -1 ]; then
    echo '没有找到主磁盘使用空间,请检查脚本'
else
    echo '主磁盘的使用空间超过阈值'
fi




 

  • 33
    点赞
  • 123
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值