BEGIN {Bins=10} $1 ~ /^!max/ {slurp(Max)} $1 ~ /^!min/ {slurp(Min)} NR < R1 {print; next } {for(I=C1;I<=C2;I++) { $I = floor(($I - Min[I])/((Max[I] - Min[I])/Bins)) + 1 $I = $I > Bins ? Bins : $I } print $0 } function slurp(a, i) { for(i=2;i<=NF;i += 2) a[$i]=$i+1 }