0

问题 :

我在这下面折断我的牙齿:

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

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

4

1 回答 1

2

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

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

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

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

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

在构建 awk 脚本时,需要注意在 awk 中引用字符串。你需要:

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

-v但是,像您所做的那样使用 awk 的选项传递值要优雅得多。

于 2012-08-26T13:45:39.453 回答