常会遇到,使用awk引用系统变量的问题,由于awk后的参数一般是包含在一对单引号内(例:awk '{print $NF}' filename)
这就直接导致引号内的变量是不会被解释出来的,而一种简单的方式是使用双引号来代替单引号:
如:
arg=abc
awk "/$arg/{print}" filename
这样$arg就可以正常解释,但这种方法也不是万能的。
lsdate=`date +%F -d "-1 days"` #定义一个日期格式
ls --full |awk "$6>=$lsdate {print $NF}" #列出一天前到现在的文件(这时会报错的)
这里报了一个方法错误,如果把2014-08-14用引号括起来,就没问题了(像这样:ls --full |awk "$6==‘$lsdate’ {print $NF}" ),但括起来后又不能解释变量
幸好awk为此提供了一个-v的参数,可以把外部变量映射为自己的内部变量
ls --full |awk -v var1=${lsdate} '$6>=var1 {print $NF}'