我正在尝试使用这个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
答案 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
解决了这个问题。