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
Foi útil?

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).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top