我有这个awk脚本:
!/NaN/{
nodes=$1;
range=$2;
size=$3;
frame=$4;
arrRate=$5;
type=$6;
pl=$7;
count[nodes,range,size,frame,arrRate,type,pl]++;
sumth[nodes,range,size,frame,arrRate,type,pl]+=$11;
sumdel[nodes,range,size,frame,arrRate,type,pl]+=$13;
sumdeliv[nodes,range,size,frame,arrRate,type,pl]+=$15;
sumthf[nodes,range,size,frame,arrRate,type,pl]+=$17;
sumdelf[nodes,range,size,frame,arrRate,type,pl]+=$19;
sumdelivf[nodes,range,size,frame,arrRate,type,pl]+=$21;
}
END{
for (i in count) {
split(i,sep,SUBSEP);
for (x in sep) {
printf "%s ", sep[x];
}
print sumth[i] / count[i],
sumdel[i] / count[i],
sumdeliv[i] / count[i],
sumthf[i] / count[i],
sumdelf[i] / count[i],
sumdelivf[i] / count[i],
count[i]
}
}
当我在mawk 1.3.3
上运行时,我输出如下:
100 10 100 10 0.0001778279 DRAND 0.0 ...
但是当我在GNU Awk 3.1.5
上跑步时,我得到了:
10 0.0001778279 DRAND 0.7 100 10 100 ...
或第一列按不同顺序打印。
有没有可靠的方法来迭代awk
数组的索引,以一种提供一致输出的方式,无论awk版本如何?
答案 0 :(得分:2)
我认为你可以只替换代码块:
split(i,sep,SUBSEP);
for (x in sep) {
printf "%s ", sep[x];
}
带
printf "%s ",i
(x in array)
不会授予订单,如果您必须拆分并打印它们,您可以:
n=split(i,sep,SUBSEP);
for (x=1;x<=n;x++) {
printf "%s ", sep[x];
}