多维数组 – awk中的多维数组
我尝试在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] } } 输出: awk: ccstscan.awk:9: END { for (i,j) in a awk: ccstscan.awk:9: ^ syntax error 这是GNU awk手册中提到的内容:
我尝试修改脚本来创建一个真正的多维数组: BEGIN { FS=OFS="t" } { a[$2+FS+$7][$3]+=$6 } END { for i in a { for j in a[i] { print i,a[i][j] } } } 我用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,a[i][j] gawk: ccstscan.awk:12: ^ syntax error 制作和扫描多维关联数组的正确格式是什么 解决方法
如果您使用模拟的多维数组,您的循环将需要如下所示:
END { for (ij in a) { split(ij,indices,SUBSEP); i=indices[1]; j=indices[2]; print i,a[ij] } } 语法中的(i,j)仅用于测试特定索引是否在数组中.尽管for循环允许类似的语法,但它不适用于for循环. 对于真正的多维数组(数组数组),您可以这样写: BEGIN { FS=OFS="t" } { a[$2+FS+$7][$3]+=$6 } END { for (i in a) { for (j in a[i]) { print i,a[i][j] } } } 但是,数组数组仅在gawk 4.0中添加,因此您的gawk版本可能不支持它. 另一个注意事项:在这一行: a[$2+FS+$7,$3]+=$6 看起来你试图连接$2,FS和$7,但“”用于数字加法,而不是连接.你需要这样写: a[$2 FS $7,$3] += $6 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |