BEGIN {FS=OFS="," Bins=10 Best = 8 Inf = 100000000000 } Pass==1 && FNR==1 { for(I=1;I<=NF;I++) { Min[I] = Inf Max[I] = -1*Inf } } Pass==1 && FNR==1 { next } Pass==2 && FNR==1 { print $0; next } Pass==1 { for(I=1;I<=NF;I++) if ($I != "?") { if (++Count[I,$I] == 1 ) Uniq[I]++ if ($I < Min[I]) Min[I]= $I if ($I > Max[I]) Max[I]= $I } } Pass==2 { for(I=1;I<=NF;I++) if (Uniq[I] > Bins) $I=round(($I - Min[I])/((Max[I] - Min[I])/Bins)); $NF = $NF >= Best print $0 } function round(x) { return int(x+0.5) }