Linux: GNU sorta non lo fa sorta ss
Domanda
Titolo riassume.
$ 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
Perché non fa questo lavoro?
Anche se io non uso 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 anche ammaraggio echo
direttamente:
$ 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
Soluzione
tipi sort(1)
linee . Bisogna analizzare i dati spazi delimitati da soli:
echo `seq 0 10` `seq 5 15` | tr " " "\n" | sort -n
Altri suggerimenti
Perché avete bisogno di ritorni a capo per 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
$
Hai singola linea di ingresso. Non c'è niente da ordinare.
Il comando come è stata immessa risultato è la sequenza di numeri essere tutto passato al sort
in una sola riga. Questo non è ciò che si desidera. Basta passare l'output di seq
direttamente a sort
:
(seq 0 10; seq 5 15) | sort -n
A proposito, come hai appena scoperto, il costrutto
echo `command`
non di solito fare quello che ci si aspetta ed è ridondante per quello che effettivamente si aspetta: Racconta la shell per catturare l'output di command
e passarlo al echo
, che lo produce come uscita di nuovo. Basta che l'output del comando passare attraverso direttamente (a meno che davvero dire di averlo elaborato da echo
, forse per espandere le sequenze di escape, o al collasso di tutto per una riga).