首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在awk脚本中使用shell变量?

如何在awk脚本中使用shell变量?
EN

Stack Overflow用户
提问于 2013-09-29 15:45:03
回答 8查看 594.4K关注 0票数 351

我找到了一些将外部外壳变量传递给awk脚本的方法,但我对'"感到困惑。

首先,我尝试使用shell脚本:

代码语言:javascript
复制
$ v=123test
$ echo $v
123test
$ echo "$v"
123test

然后尝试awk:

代码语言:javascript
复制
$ awk 'BEGIN{print "'$v'"}'
$ 123test
$ awk 'BEGIN{print '"$v"'}'
$ 123

为什么会有所不同?

最后,我尝试了一下:

代码语言:javascript
复制
$ 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 

我对此感到困惑。

EN

回答 8

Stack Overflow用户

发布于 2014-11-06 20:46:34

似乎根本没有提到历史悠久的ENVIRON awk内置散列。它的用法示例如下:

代码语言:javascript
复制
$ X=Solaris awk 'BEGIN{print ENVIRON["X"], ENVIRON["TERM"]}'
Solaris rxvt
票数 31
EN

Stack Overflow用户

发布于 2013-09-29 21:22:50

根据您希望如何处理外壳变量中的反斜杠,使用这两个变量之一(avar是一个awk变量,svar是一个外壳变量):

代码语言:javascript
复制
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。上面的第一种方法几乎总是你最好的选择,并且具有最明显的语义。

票数 13
EN

Stack Overflow用户

发布于 2013-09-29 15:49:33

您可以通过变量名(v)和环境变量的值(=) ("${v}")传入command-line option -v

代码语言:javascript
复制
% awk -vv="${v}" 'BEGIN { print v }'
123test

或者让它更清晰(使用更少的v):

代码语言:javascript
复制
% environment_variable=123test
% awk -vawk_variable="${environment_variable}" 'BEGIN { print awk_variable }'
123test
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19075671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档