Estou no solaris e precisava de uma resposta sem ordenação e a resposta aceita não estava funcionando para mim.
Joeyg no unix.com teve a resposta:
classificar apenas uma coluna
cat tmp.txt
1 5
2 3
5 4
1 3
#Sort by 1st column leaving second stable sorted by the 1st.
cat -n tmp.txt | sort -k 2,2 | awk '{print $2,$3}'
1 5
1 3
2 3
5 4
#Sort by 2nd column leaving first stable sorted by the 2nd.
cat -n tmp.txt | sort -k 3,3 | awk '{print $2,$3}'
2 3
1 3
5 4
1 5
Uma interpretação diferente por meio de um comentário é classificar uma única coluna sem afetar o restante:
#Sort by 1st column leaving other columns untouched:
cat -n tmp.txt | sort -k 2,2 | awk '{a[NR]=$2;b[$1]=$3} END {for (i=1;i<=NR;i++)print a[i]" "b[i]}'
1 5
1 3
2 4
5 3
Explanation:
cat -n adds rownums to force sort to do "sort -s" without GNU sort.
sort -k 2,2 sorts by the 1st column
NR is a built-in variable that holds the row num.
a[NR]=$2; puts the sorted column in a[1..4]
b[$1]=$3; puts the "unsorted" 2nd column in b[rownum from cat]
Then the for loop just outputs the two arrays.
O que eu precisava quais eram as entradas da coluna 3 mais recentes exclusivas no arquivo. por exemplo,
cat tmp2.txt
5|1|3
4|2|1
1|3|2
3|4|1
2|5|2
cat -n tmp2.txt | sort -k 3 -rut '|' | awk '{print $2}'
5|1|3
2|5|2
3|4|1