awk当中使用外部变量
1.awk命令使用双引号的情况下
此时在awk命令里面使用"$var"就可以引用外部环境变量的var的值
$ var="BASH";echo"unixscript"|awk"gsub(/unix/,\"$var\")"
2.awk命令使用单引号的情况下
此时在awk命令里面使用"‘“$var”’"就可以应用外部变量var的值,注意五个点表示两个双引号之间有一个单引号
$ var="BASH";echo"unixscript"|awk′gsub(/unix/,"′"var"'")'
3.awk的参数-v (推荐)
这个没什么好解释的,应该是用得比较多的一种方法了,就是使用-v参数,加带一个变量极其赋值
$ echo "unix script"| awk -v var="BASH" 'gsub(/unix/, var)'
4.如下, ${os}为awk外部变量:
#!/bin/bash
os_types=(windows linux macos)
for os in ${types[@]}
do
conf_file="${os}.conf"
cat ${conf_file} | awk -F "\t" '{print "'${os}' "$1" "$3}'
done
5.export变量,然后在awk中使用ENVIRON[“var”]形式获取环境变量的值
例如:
var="this a test"; export var;
awk 'BEGIN{print ENVIRON["var"]}'
shell中如何使用awk程序中定义的变量呢?
“由awk向shell传递变量”,其思想无非是用awk(sed/perl等也是一样)输出若干条shell命令,然后再用shell去执行这些命令。
例如:
eval (awk′BEGINprint"var1=′str1′;var2=′str2′"′)或者eval(awk′BEGINprint"var1=′str1′;var2=′str2′"′)或者eval(awk '{printf("var1=%s; var2=%s; var3=%s;",1,1,2,$3)}' abc.txt)
之后可以在当前shell中使用var1,var2等变量了。
echo "var1=var1−−−−−var2=var1−−−−−var2=var2"
三、一个检测磁盘空间使用情况的脚本的例子
#!/bin/sh
#文件系统名字
FILE_SYSTEM_NAME="rootfs"
#文件系统挂在的目录
MOUNTED_ON="/"
#shell命令使用awk中定义的变量spaceSize
eval (df−P|awk′(df−P|awk′1=="'"FILE_SYSTEM_NAME"'" &&FILE_SYSTEM_NAME"'" &&6=="'MOUNTED_ON'" {printf("spaceSize=%s;",$5)}')
echo "主磁盘的使用空间为MOUNTED_ON'" {printf("spaceSize=%s;",$5)}') echo "主磁盘的使用空间为spaceSize"
spaceSize=`echo spaceSize|cut−dif[aaspaceSize|cut−dif[aaspaceSize = "aa" ]; then
spaceSize=-1
fi
if [ spaceSize−le85];then echo′主磁盘的使用空间充足′elif[spaceSize−le85];then echo′主磁盘的使用空间充足′elif[spaceSize -eq -1 ]; then
echo '没有找到主磁盘使用空间,请检查脚本'
else
echo '主磁盘的使用空间超过阈值'
fi