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
È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top