Nem kell előre semmit sem rendezgetni - miután megértettem, mit kell kiírni a végén, már adódott a megoldás:
BEGIN { cmax=0; }
{ if ( cmax<NF ) {
cmax=NF;
};
for ( i=1; i<=NF; i++ ) {
ertekek[$i]++;
ertcol[$i"."i]++;
}
}
END { for ( v in ertekek ) {
for ( col=1; col<cmax+1; col++ ) {
if ( ertcol[v"."col]==0 ) {
p="-";
} else {
p=v;
};
printf "%s\t", p;
};
printf "\n"
}
}