WYS*_*WYG 5 awk gawk multidimensional-array
我尝试在awk中创建一个伪多维数组.
# Calculate cumulative context score
BEGIN { FS=OFS="\t" }
{
a[$2+FS+$7,$3]+=$6
}
END { for (i,j) in a
{ print i,j,a[i,j] }
}
Run Code Online (Sandbox Code Playgroud)
输出:
awk: ccstscan.awk:9: END { for (i,j) in a
awk: ccstscan.awk:9: ^ syntax error
Run Code Online (Sandbox Code Playgroud)
这是GNU awk手册中提到的内容:
要测试多维数组中是否存在特定索引序列,请使用用于单维数组的相同运算符(in).将括号中的整个索引序列(以逗号分隔)写为左操作数:
Run Code Online (Sandbox Code Playgroud)(subscript1, subscript2, ...) in array
我尝试修改脚本来创建一个真正的多维数组:
BEGIN { FS=OFS="\t" }
{
a[$2+FS+$7][$3]+=$6
}
END { for i in a
{
for j in a[i]
{ print i,j,a[i][j]
}
}
}
Run Code Online (Sandbox Code Playgroud)
我用gawk跑了.它也给出了一个错误:
gawk: ccstscan.awk:6: a[$2+FS+$7][$3]+=$6
gawk: ccstscan.awk:6: ^ syntax error
gawk: ccstscan.awk:9: END { for i in a
gawk: ccstscan.awk:9: ^ syntax error
gawk: ccstscan.awk:11: for j in a[i]
gawk: ccstscan.awk:11: ^ syntax error
gawk: ccstscan.awk:11: for j in a[i]
gawk: ccstscan.awk:11: ^ syntax error
gawk: ccstscan.awk:12: { print i,j,a[i][j]
gawk: ccstscan.awk:12: ^ syntax error
Run Code Online (Sandbox Code Playgroud)
制作和扫描多维关联数组的正确格式是什么
Vau*_*ato 11
如果您使用模拟的多维数组,您的循环将需要如下所示:
END {
for (ij in a) {
split(ij,indices,SUBSEP);
i=indices[1];
j=indices[2];
print i,j,a[ij]
}
}
Run Code Online (Sandbox Code Playgroud)
该(i,j) in a语法仅适用于测试特定索引是否在数组中.尽管for循环允许类似的语法,但它不适用于for循环.
对于真正的多维数组(数组数组),您可以这样写:
BEGIN { FS=OFS="\t" }
{ a[$2+FS+$7][$3]+=$6 }
END {
for (i in a) {
for (j in a[i]) {
print i,j,a[i][j]
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,数组数组仅在gawk 4.0中添加,因此您的gawk版本可能不支持它.
另一个注意事项:在这一行:
a[$2+FS+$7,$3]+=$6
Run Code Online (Sandbox Code Playgroud)
看起来你试图连接$ 2,FS和$ 7,但"+"用于数字加法,而不是连接.你需要这样写:
a[$2 FS $7,$3] += $6
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5136 次 |
| 最近记录: |