awk中的shell变量没有-v选项它正在工作

时间:2012-07-11 21:37:55

标签: shell awk grep

我注意到shell脚本变量可以在awk脚本中使用,如下所示:

var="help"
awk 'BEGIN{print "'$var'" }'

有人能告诉我如何在保留awk之外的值的同时更改awk中var的值吗?

与访问awk中的shell脚本变量类似,我们可以访问awk中的shell数组吗?如果是这样,怎么样?

2 个答案:

答案 0 :(得分:1)

这是不可能的;您拥有的唯一变种:

  • 使用命令替换并将awk的输出写入变量;
  • 将数据写入文件,然后从外壳读取;
  • 生成shell输出,然后使用eval执行它。

实施例

命令替换,一个变量:

$ export A=10
$ A=$(awk 'END {print 2*ENVIRON["A"]}' < /dev/null)
$ echo $A
20

这里你将A乘以2并将乘法结果写回来。

eval;两个变量:

$ A=10
$ B=10
$ eval $(awk 'END {print "A="2*ENVIRON["A"]"; B="2*ENVIRON["B"]}' < /dev/null)
$ echo $A
20
$ echo $B
20
$ awk 'END {print "A="2*ENVIRON["A"]"; B="2*ENVIRON["B"]}' < /dev/null
A=40; B=40

答案 1 :(得分:0)

它使用文件中介,但确实有效:

var="hello world"
cat > /tmp/my_script.awk.$$ <<EOF
BEGIN { print \"$var\" }
EOF
awk /tmp/my_script.awk.$$
rm -f /tmp/my_script.awk.$$

这使用shell的here document功能,检查shell手册,了解有关此处文档中插值的规则。