#!/usr/bin/gawk -f # /* vim: set filetype=awk : */ -*- awk -*- BEGIN{ FS="," OFS="&" print "\\begin{tabular}{|rr|r@{~}r@{~}l}\\cline{1-2}"; Scale=2 } { sub(/ID/,"rank"); gsub(/%/,"\\%"); gsub(/deltas/,"compare"); sub(//,"$>$"); sub(/\#rx/,"method"); gsub(/_/,"-"); for(X=1;X<=NF;X++) { Data[NR,X]=$X } } END { #First Pass finds the max or min of each group with the highest magnitude. print Data[1,3],Data[1,9],"","","\\\\\\cline{1-2}"; Group=0; for(I=1;I<=NR;I++) { #If the first field is "rank" then it's a new group if(Data[I,1]=="rank") { Group++; Mag[Group]=0; } else { Min = Data[I,7] < 0 ? -1* Data[I,7] : Data[I,7]; Max = Data[I,11] < 0 ? -1* Data[I,11] : Data[I,11]; if (Min>Mag[Group]) {Mag[Group]=Min} if (Max>Mag[Group]) {Mag[Group]=Max} } #for(X=1;X<=NF;X++) #{ # printf("%s%s",Data[I,X],OFS); #} #printf("\n"); } #Second Pass scales the min, q1, q3, and max of each group Group=0; for(I=1;I<=NR;I++) { #If the first field is "ID" then it's a new group if(Data[I,1]=="rank") { Group++; Norm=100/Mag[Group] } else { Data[I,7]=Data[I,7]*Norm Data[I,8]=Data[I,8]*Norm Data[I,10]=Data[I,10]*Norm Data[I,11]=Data[I,11]*Norm bar1=Data[I,8] - Data[I,7]; bar2=Data[I,11] - Data[I,10]; print Data[I,3],Data[I,9],-1*Mag[Group] "\\%","\\boxplot{"s(Data[I,7] + 100)"}{"s(bar1)"}{"s(100 + Data[I,9])"}{"s($10+100)"}{"s(bar2)"}&"Mag[Group]"\\%\\\\"; } } print "\\cline{1-2}\\end{tabular}" } function s(x) {return int(x/Scale) }