RosettaCodeData/Task/Ranking-methods/AWK/ranking-methods.awk

101 lines
1.8 KiB
Awk

##
## Dense ranking in file: ranking_d.awk
##
BEGIN{ lastresult = "!"; lastrank = 0 }
function d_rank(){
if($1==lastresult){
print lastrank, $0
}else{
lastresult = $1
print ++lastrank, $0 }
}
//{d_rank() }
##
## Fractional ranking in file: ranking_f.awk
##
BEGIN{
last = "!"
flen = 0 }
function f_rank(){
item = $0
if($1!=last){
if(flen){
sum = 0
for(fl=0; fl < flen;){
$0 = fifo[fl++]
sum += $1 }
mean = sum / flen
for(fl=0; fl < flen;){
$0 = fifo[fl++]
$1 = ""
printf("%3g %s\n", mean, $0) }
flen = 0
}}
$0 = item
last = $1
fifo[flen++] = sprintf("%i %s", FNR, item)
}
//{f_rank()}
END{ if(flen){
sum = 0
for(fl=0; fl < flen;){
$0 = fifo[fl++]
sum += $1 }
mean = sum / flen
for(fl=0; fl < flen;){
$0 = fifo[fl++]
$1 = ""
printf("%3g %s\n", mean, $0) }}}
##
## Modified competition ranking in file: ranking_mc.awk
##
BEGIN{
lastresult = "!"
flen = 0 }
function mc_rank(){
if($1==lastresult){
fifo[flen++] = $0
}else{
for(fl=0; fl < flen;){
print FNR-1, fifo[fl++]}
flen = 0
fifo[flen++] = $0
lastresult = $1}
}
//{mc_rank()}
END{ for(fl=0; fl < flen;){
print FNR, fifo[fl++]} }
##
## Ordinal ranking in file: ranking_o.awk
##
function o_rank(){ print FNR, $0 }
//{o_rank() }
##
## Standard competition ranking in file: ranking_sc.awk
##
BEGIN{ lastresult = lastrank = "!" }
function sc_rank(){
if($1==lastresult){
print lastrank, $0
}else{
print FNR, $0
lastresult = $1
lastrank = FNR}
}
//{sc_rank()}