Assumindo que seu arquivo é xy.dat e separado por espaço em branco:
cat xy.dat | while read line ; do
echo $line | tr ' ' '\n' | sort -nr | tr '\n' ' '
echo
done
Como meus dados de teste eram ascendentes numéricos, eu uso sort -nr no coração para diminuí-lo e ver algum efeito.
Agora, para torná-lo configurável, basta passar como parâmetros os sinalizadores para classificação, o que permite ascendente (nenhum) e descendente -r (reverso), mas também -n (numérico) e muito mais (veja: sort --help
). Outra coisa que você pode gostar de configurar é o delimitador. Blank / Tab / ponto-e-vírgula / vírgula? Talvez um grupo regex como "[ \t]"
signifique em branco ou tabulação? Mas o que usar para saída então? E você não gostaria de codificar o nome do arquivo, mas usar seu programa como um filtro. Aqui está uma abordagem rápida:
#!/bin/bash
flags=$1
delim=$2
while read line ; do
echo $line | tr "$delim" '\n' | sort $flags | tr '\n' "$delim"
echo
done
invocação:
cat num.dat | bash colsort.sh "-nr" ' '
4 3 2 1
8 7 6 5
11 10 9
cat num.dat | bash colsort.sh "-r" ' '
4 3 2 1
8 7 6 5
9 11 10
cat num.dat | bash colsort.sh "--" ' '
1 2 3 4
5 6 7 8
10 11 9
Veja como ele é classificado por padrão com - (alfabético: 10 11 9), reverso (9 10 11) ou numérico (11 10 9).
Principalmente como mascarar em branco, separador e assim por diante, seria útil, se documentado.