Я пытаюсь сортировать массив (словарь) по их значениям, сохраняя правильные ключи. У меня проблема. Я написал код, который выполняет задачу, но когда я вызываю функцию повторно, printTop работает только с первым вызовом.gawk do дважды asorti() error
Моя функция простак является:
function printTop(n,array){
for (i in array) tmpidx[sprintf("%12s", array[i]),i] = i
num = asorti(tmpidx,ind)
j=0
for (i=1; i<=num; i++) {
split(ind[i], tmp, SUBSEP)
indices[++j] = tmp[2] # tmp[2] is the name
}
for (i=num; i>num-n && i>0; i--)print indices[i]"\t"array[indices[i]]
}
Я называю это в следующем скрипте:
'gawk{
IPsrcPkg[$1]+=$8;
IPdstPkg[$2]+=$8;
IPsrcBytes[$1]+=$9;
IPdstBytes[$2]+=$9;
}
END {
printTop(sizeTop,IPdstBytes,NULL);
printTop(sizeTop,IPsrcPkg,NULL);
printTop(sizeTop,IPdstPkg,NULL);
printTop(sizeTop,IPsrcBytes,NULL);
}'
Результат является:
TOP5 IP_DST por Bytes:
148.244.42.179 15404514
187.137.83.175 11962637
148.244.42.173 10698849
173.194.46.21 9479857
70.37.119.14 5551644
TOP5 IP_SRC por paquetes:
148.244.42.179 32479
187.137.83.175 11626
148.244.42.173 34471
173.194.46.21 32503
70.37.119.14
TOP5 IP_DST por paquetes:
148.244.42.179 22127
187.137.83.175 14899
148.244.42.173 33697
173.194.46.21 32763
70.37.119.14 5548
TOP5 IP_SRC por Bytes:
148.244.43.5 24157292
148.244.42.179 11055963
65.52.32.92 15308768
187.137.83.175 700023
148.244.42.179 11055963
Вы можете увидеть, как второй, третий , а четвертые вершины не имеют никакого порядка. Если я изменю порядок звонков, программа всегда работает всегда для первой функции вызова. Есть идеи? Любое решение?
Спасибо за ваше время!
Victor
Что такое 'sizeTop'? –
да извините, его константа var, в данном случае sizeTop = 10 –