0

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

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

谁能告诉我如何更改var内部 awk 的值,同时保留 awk 外部的值?

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

4

2 回答 2

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
于 2012-07-11T21:41:15.623 回答
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.$$

这使用了here documentshell 的特性,查看你的 shell 手册,了解有关此处文档中插值的规则。

于 2012-07-11T22:00:59.350 回答