我找到了一些将外部外壳变量传递给awk
脚本的方法,但我对'
和"
感到困惑。
首先,我尝试使用shell脚本:
$ v=123test
$ echo $v
123test
$ echo "$v"
123test
然后尝试awk:
$ awk 'BEGIN{print "'$v'"}'
$ 123test
$ awk 'BEGIN{print '"$v"'}'
$ 123
为什么会有所不同?
最后,我尝试了一下:
$ awk 'BEGIN{print " '$v' "}'
$ 123test
$ awk 'BEGIN{print ' "$v" '}'
awk: cmd. line:1: BEGIN{print
awk: cmd. line:1: ^ unexpected newline or end of string
我对此感到困惑。
发布于 2014-11-06 20:46:34
似乎根本没有提到历史悠久的ENVIRON
awk内置散列。它的用法示例如下:
$ X=Solaris awk 'BEGIN{print ENVIRON["X"], ENVIRON["TERM"]}'
Solaris rxvt
发布于 2013-09-29 21:22:50
根据您希望如何处理外壳变量中的反斜杠,使用这两个变量之一(avar
是一个awk变量,svar
是一个外壳变量):
awk -v avar="$svar" '... avar ...' file
awk 'BEGIN{avar=ARGV[1];ARGV[1]=""}... avar ...' "$svar" file
有关详细信息和其他选项,请参阅http://cfajohnson.com/shell/cus-faq-2.html#Q24。上面的第一种方法几乎总是你最好的选择,并且具有最明显的语义。
发布于 2013-09-29 15:49:33
您可以通过变量名(v
)和环境变量的值(=
) ("${v}"
)传入command-line option -v
:
% awk -vv="${v}" 'BEGIN { print v }'
123test
或者让它更清晰(使用更少的v
):
% environment_variable=123test
% awk -vawk_variable="${environment_variable}" 'BEGIN { print awk_variable }'
123test
https://stackoverflow.com/questions/19075671
复制相似问题