awk -v 引用系统变量的问题

常会遇到,使用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}'

posted @ 2014-08-15 15:33  [言_午]  阅读(2636)  评论(0编辑  收藏  举报