#!/usr/bin/gawk -f BEGIN { FS=OFS = ","; let["A" ]= 2; let["A-"]= 1.5; let["B+"]= 1.5; let["B" ]= 1; let["C" ]= 0; let["D" ]= -1; let["D-"]= -1.5; let["E+"]= -1.5; let["E" ]= -2 bet["acap"]=1 bet["apex"]=1 bet["flex"]=-1 bet["cplx"]=-1 bet["ltex"]=1 bet["tool"]=1 bet["flex"]=1 bet["pmat"]=1 bet["prec"]=1 bet["resl"]=1 med["acap"]=0.95 med["apex"]=0.97 med["ltex"]=0.96 med["tool"]=1 med["cplx"]=1.33 med["resl"]=3.99 med["pmat"]=3.67 med["prec"]=4.41 med["flex"]=4.05 name="rely"; min[name]=1; max[name]=5 ; T[name,1]=0.82; T[name,2]=0.92; T[name,3]=1.00; T[name,4]=1.10; T[name,5]=1.26; T[name,6]=0; name="data"; min[name]=2; max[name]=5; T[name,1]=0; T[name,2]=0.90; T[name,3]=1.00; T[name,4]=1.14; T[name,5]=1.28; T[name,6]=0; name="cplx"; min[name]=1; max[name]=6; T[name,1]=0.73; T[name,2]=0.87; T[name,3]=1.00; T[name,4]=1.17; T[name,5]=1.34; T[name,6]=1.74; name="ruse"; min[name]=2; max[name]=6; T[name,1]=0; T[name,2]=0.95; T[name,3]=1.00; T[name,4]=1.07; T[name,5]=1.15; T[name,6]=1.24; name="docu"; min[name]=1; max[name]=5; T[name,1]=0.81; T[name,2]=0.91; T[name,3]=1.00; T[name,4]=1.11; T[name,5]=1.23; T[name,6]=0; name="time"; min[name]=3; max[name]=6; T[name,1]=0; T[name,2]=0; T[name,3]=1.00; T[name,4]=1.11; T[name,5]=1.29; T[name,6]=1.63; name="stor"; min[name]=3; max[name]=6; T[name,1]=0; T[name,2]=0; T[name,3]=1.00; T[name,4]=1.05; T[name,5]=1.17; T[name,6]=1.46; name="pvol"; min[name]=2; max[name]=5; T[name,1]=0; T[name,2]=0.87; T[name,3]=1.00; T[name,4]=1.15; T[name,5]=1.30; T[name,6]=0; name="acap"; min[name]=1; max[name]=5; T[name,1]=1.42; T[name,2]=1.19; T[name,3]=1.00; T[name,4]=0.85; T[name,5]=0.71; T[name,6]=0; name="pcap"; min[name]=1; max[name]=5; T[name,1]=1.34; T[name,2]=1.15; T[name,3]=1.00; T[name,4]=0.88; T[name,5]=0.76; T[name,6]=0; name="pcon"; min[name]=1; max[name]=5; T[name,1]=1.29; T[name,2]=1.12; T[name,3]=1.00; T[name,4]=0.90; T[name,5]=0.81; T[name,6]=0; name="apex"; min[name]=1; max[name]=5; T[name,1]=1.22; T[name,2]=1.10; T[name,3]=1.00; T[name,4]=0.88; T[name,5]=0.81; T[name,6]=0; name="plex"; min[name]=1; max[name]=5; T[name,1]=1.19; T[name,2]=1.09; T[name,3]=1.00; T[name,4]=0.91; T[name,5]=0.85; T[name,6]=0; name="ltex"; min[name]=1; max[name]=5; T[name,1]=1.20; T[name,2]=1.09; T[name,3]=1.00; T[name,4]=0.91; T[name,5]=0.84; T[name,6]=0; name="tool"; min[name]=1; max[name]=5; T[name,1]=1.17; T[name,2]=1.09; T[name,3]=1.00; T[name,4]=0.90; T[name,5]=0.78; T[name,6]=0; name="site"; min[name]=1; max[name]=6; T[name,1]=1.22; T[name,2]=1.09; T[name,3]=1.00; T[name,4]=0.93; T[name,5]=0.86; T[name,6]=0.80; name="sced"; min[name]=1; max[name]=5; T[name,1]=1.43; T[name,2]=1.14; T[name,3]=1.00; T[name,4]=1.00; T[name,5]=1.00; T[name,6]=0; #Scale factors: name="prec"; min[name]=1; max[name]=5; T[name,1]=6.20; T[name,2]=4.96; T[name,3]=3.72; T[name,4]=2.48; T[name,5]=1.24; T[name,6]=0; name="flex"; min[name]=1; max[name]=5; T[name,1]=5.07; T[name,2]=4.05; T[name,3]=3.04; T[name,4]=2.03; T[name,5]=1.01; T[name,6]=0; name="resl"; min[name]=1; max[name]=5; T[name,1]=7.07; T[name,2]=5.65; T[name,3]=4.24; T[name,4]=2.83; T[name,5]=1.41; T[name,6]=0; name="team"; min[name]=1; max[name]=5; T[name,1]=5.48; T[name,2]=4.38; T[name,3]=3.29; T[name,4]=2.19; T[name,5]=1.01; T[name,6]=0; name="pmat"; min[name]=1; max[name]=5; T[name,1]=7.80; T[name,2]=6.24; T[name,3]=4.68; T[name,4]=3.12; T[name,5]=1.56; T[name,6]=0; print closest("flex",median("flex")) } { pos1 = closest($1,median($1)) pos2 = pos1 + better($1)*letter($2) print $1,median($1),pos1,pos2,T[$1,pos2] } function median(x) { if (x in med) {return med[x]} else {print "no med[" x "]" }} function better(x) { if (x in bet) {return bet[x]} else {print "no bet[" x "]" }} function letter(x) { if (x in let) {return let[x]} else {print "no let[" x "]" }} function minimum(x) { if (x in min) {return min[x]} else {print "no min[" x "]" }} function maximum(x) { if (x in max) {return max[x]} else {print "no max[" x "]" }} function closest(name,value, dist,i,best,x) { best=100000 for(i=minimum(name);i<=maximum(name);i++) { dist = value - T[name,i] dist = dist < 0 ? -1 * dist : dist; if (dist < best) { best= dist; x=i } } return x }