awk:非法引用数组a

时间:2013-06-04 15:16:49

标签: awk

我正在尝试使用这个awk命令:

awk -F: '
FILENAME==ARGV[1] { 
    a[FNR]=$1
}
FILENAME==ARGV[2] { 
    for(i=1;i<=length(a);i++) { 
        if(match($0,a[i])) { 
            print a[i],$1
        }
    }
}' 16.passwd 16.group | sort

但得到了:

awk: line 1: illegal reference to array a

3 个答案:

答案 0 :(得分:11)

你的问题是:

length(a)

使用length(array)获取数组中元素的数量是一个GNU awk扩展,显然你不是使用GNU awk。变化:

for(i=1;i<=length(a);i++)

for(i=1;i in a;i++)

它应该有用。

答案 1 :(得分:1)

就语法而言,我没有看到你的脚本有什么问题。我将您的代码保存在名为 script.awk 的文件中,并执行:

awk -F: -f script.awk file1 file2

并没有看到任何错误。为什么不尝试相同的操作:将脚本放在一个单独的文件中并在其上调用awk。如果您仍然遇到同样的问题,我怀疑问题可能出在数据文件中。

更新

我清理了一些代码,新版本可能更容易阅读:

FNR==NR {a[FNR] = $1; next}

{
    for (i in a) {
        if (match($0, a[i])) {
            print a[i], $1
        }
    }
}

答案 2 :(得分:0)

我遇到了这个问题。脚本在旧服务器上运行,并停止处理新服务器。

问题是,旧服务器有“傻瓜”的问题。已经安装了,而且新的“mawk&#39;”不支持数组。

我通过sudo apt-get install gawk解决了这个问题。