问题:
我在这下面打破了牙齿:
awk -v full=wc -v empty=wp '{
...blablabla...
if ($4==full) stop=yes
if (stop==yes && $4==empty) exit
...blablabla...
}'
如果我没有在开头声明两个变量full
和empty
,并且在脚本中使用这些变量的值,那么代码运行良好(我的意思是,我得到一个输出) 。如果我只使用脚本中的第一个变量,我会得到相同的输出。但是,如果我只使用第二个变量,我根本就没有输出。
答案 0 :(得分:3)
考虑扩展变量时会发生什么。 awk身体的一部分来自:
' ... if ($4=='$full') ...'
到
' ... if ($4==wc) ...'
由于wc
是一个“裸词”,awk认为它是一个变量并替换它的值(空字符串),所以你得到这个:
' ... if ($4=="") ...'
当你构建你的awk脚本时,你需要知道在awk中引用字符串。你需要:
' ... if ($4=="'$full'") ...'
但是,使用awk的-v
选项传递值会更加优雅。