【发布时间】:2016-01-11 09:20:29
【问题描述】:
我希望能够将数组变量传递给awk。我不是指一个 shell 数组,而是一个原生的 awk 数组。我知道我可以像这样传递标量变量:
awk -vfoo="1" 'NR==foo' file
我可以使用相同的机制来定义awk 数组吗?比如:
$ awk -v"foo[0]=1" 'NR==foo' file
awk: fatal: `foo[0]' is not a legal variable name
我已经尝试了上面的一些变体,但它们都不能在我的 Debian 上的 GNU awk 4.1.1 上运行。那么,是否有任何版本的awk(gawk、mawk 或其他任何版本)可以接受来自-v 开关的数组?
我知道我可以解决这个问题并且可以很容易地想到解决方法,我只是想知道是否有任何 awk 实现本身支持这种功能。
【问题讨论】:
-
我不确定答案,但我怀疑不是,据我所知,awk 甚至不支持像
a = [1, 2, 3]这样的数组初始化... -
我认为这是不可能的。请注意@TomFenech,这种初始化是不可能的,因为在
awk中它们只是关联的。 -
您不能在 awk 之外定义它,但您可以通过序列化将 bash 数组转换为 awk 数组,请参阅stackoverflow.com/a/32887826/1435869
-
@karakfa 谢谢,但我知道这一点。这就是为什么我特别指出“我的意思不是一个shell数组,而是一个原生的
awk一个”。