0
У меня есть этот 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?
Да, это сработало. Спасибо. Интересно, где кто-то мог найти документацию относительно порядка ... – user000001
Для записи 'printf '% s", i' печатает символ '^ \\' между полями, но последний блок работает отлично. – user000001
@ user000001 http://www.gnu.org/software/gawk/manual/gawk.html#Scanning-an-Array 'Порядок, в котором элементы массива обращаются к этому оператору, определяется внутренним расположением элементы массива в awk и, как правило, не могут управляться или меняться. 'также 1-й абзац следующего раздела – Kent