在同一个脚本中测试两个变量

时间:2012-08-26 12:12:06

标签: variables awk

问题:

我在这下面打破了牙齿:

awk -v full=wc -v empty=wp '{
     ...blablabla...
     if ($4==full) stop=yes
     if (stop==yes && $4==empty) exit
     ...blablabla...
     }'

如果我没有在开头声明两个变量fullempty,并且在脚本中使用这些变量的值,那么代码运行良好(我的意思是,我得到一个输出) 。如果我只使用脚本中的第一个变量,我会得到相同的输出。但是,如果我只使用第二个变量,我根本就没有输出。

1 个答案:

答案 0 :(得分:3)

考虑扩展变量时会发生什么。 awk身体的一部分来自:

' ... if ($4=='$full') ...'

' ... if ($4==wc) ...'

由于wc是一个“裸词”,awk认为它是一个变量并替换它的值(空字符串),所以你得到这个:

' ... if ($4=="") ...'

当你构建你的awk脚本时,你需要知道在awk中引用字符串。你需要:

' ... if ($4=="'$full'") ...'

但是,使用awk的-v选项传递值会更加优雅。