Linux:A classificação GNU não classifica seq
Pergunta
O título resume tudo.
$ echo `seq 0 10` `seq 5 15` | sort -n
0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15
Por que isso não funciona?
Mesmo que eu não use seq
:
echo '0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15' | sort -n
0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15
E até abandonando echo
diretamente:
$ echo '0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15' > numbers
$ sort -n numbers
0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15
Solução
sort(1)
classifica linhas. Você tem que analisar os dados delimitados em branco:
echo `seq 0 10` `seq 5 15` | tr " " "\n" | sort -n
Outras dicas
Porque você precisa de novas linhas para sort
:
$ echo `seq 0 10` `seq 5 15` | tr " " "\\n" | sort -n | tr "\\n" " "; echo ""
0 1 2 3 4 5 5 6 6 7 7 8 8 9 9 10 10 11 12 13 14 15
$
Você tem uma única linha de entrada. Não há nada para classificar.
O comando conforme você digitou resulta na sequência de números sendo todos passados para sort
em uma linha.Não é isso que você quer.Basta passar a saída de seq
Diretamente a sort
:
(seq 0 10; seq 5 15) | sort -n
A propósito, como você acabou de descobrir, a construção
echo `command`
não geralmente faça o que você espera e é redundante para o que você realmente espera:Ele diz ao shell para capturar a saída de command
e passe para echo
, que o produz como saída novamente.Apenas deixe a saída do comando passar diretamente (a menos que você realmente pretende que seja processado por echo
, talvez para expandir sequências de escape ou para recolher tudo em uma linha).