BEGIN {FS=OFS="," Bins = 10 Best = 8 } Pass==1 && FNR==1 { for(I=1;I<=NF;I++) { Num[I] = $I ~ /^#?[A-Z]/ if (Num[I]) { Min[I] = Inf Max[I] = -1*Inf } } next } Pass==2 && FNR==1 { print $0; next } Pass==1 { for(I=1;I<=NF;I++) if ($I != Missing) { if (++Count[I,$I] == 1 ) Uniq[I]++ if (Num[I]) { if ($I < Min[I]) Min[I]= $I if ($I > Max[I]) Max[I]= $I } } } Pass==2 { for(I=1;I<=NF;I++) if (Num[I] && Uniq[I] > Bins && $I != Missing) { W = (Max[I] - Min[I])/ (Bins - 1) B = 1+round(($I - Min[I])/W); $I = Min[I] + (B - 0.5) * W } $NF = Num[NF] ? $NF >= Best : $NF print $0 }