我正在尝试使用此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
Run Code Online (Sandbox Code Playgroud)
但得到了:
awk: line 1: illegal reference to array a
Run Code Online (Sandbox Code Playgroud)
Ed *_*ton 11
你的问题是这样的:
length(a)
Run Code Online (Sandbox Code Playgroud)
使用length(array)来获取数组中元素的数量是一个GNU awk扩展,显然你没有使用GNU awk.更改:
for(i=1;i<=length(a);i++)
Run Code Online (Sandbox Code Playgroud)
至
for(i=1;i in a;i++)
Run Code Online (Sandbox Code Playgroud)
它应该工作.
我得到了这个问题。脚本在旧服务器上运行并停止在新服务器上运行。
问题是旧服务器安装了“gawk”,而新服务器安装了“mawk”,它不支持阵列。
我通过解决了它sudo apt-get install gawk。
就语法而言,我没有发现您的脚本有任何问题。我将您的代码保存在名为script.awk的文件中,并执行:
awk -F: -f script.awk file1 file2
Run Code Online (Sandbox Code Playgroud)
并没有看到任何错误。为什么不尝试同样的操作:将脚本放在单独的文件中并对其调用 awk 。如果您仍然遇到同样的问题,我怀疑问题可能出在数据文件中。
我稍微清理了一下代码,新版本可能更容易阅读:
FNR==NR {a[FNR] = $1; next}
{
for (i in a) {
if (match($0, a[i])) {
print a[i], $1
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3801 次 |
| 最近记录: |