Dire che ho questo file.ordinamento con più chiavi con comando di ordinamento Linux
$ cat a.txt
c 1002 4
f 1001 1
d 1003 1
a 1001 3
e 1004 2
b 1001 2
voglio ordinarlo dalla seconda colonna e poi dalla terza colonna. Le colonne due sono numeri, mentre la colonna 3 può essere trattata come una stringa. So che il seguente comando funziona bene.
$ sort -k2,2n -k3,3 a.txt
f 1001 1
b 1001 2
a 1001 3
c 1002 4
d 1003 1
e 1004 2
Tuttavia, penso sort -k2n a.txt
dovrebbe anche lavorare, mentre non è così.
$ sort -k2n a.txt
a 1001 3
b 1001 2
f 1001 1
c 1002 4
d 1003 1
e 1004 2
Sembra come ordina dalla colonna due, quindi dalla colonna uno anziché dalla colonna tre. Perché sta succedendo? È un bug o no? Causa sort -k2 a.txt
funziona bene con i dati sopra poiché questi numeri sono solo a larghezza fissa.
La mia versione di ordinamento è sort (GNU coreutils) 8.15
in cygwin.
Interessante. 'sort -k2 a.txt' funzionerà in * questo * caso. '-k2' dice di ordinare usando una chiave che inizia al campo 2 e continua fino alla fine della riga. '-k2n' dice di ordinare il campo 2 in ordine numerico; ciò potrebbe significare che la chiave di ordinamento termina incontrando spazi bianchi tra i campi 2 e 3. Potrebbe essere una buona idea incollare la versione del tuo ordinamento nella domanda da qualche parte. –
Uso di 'sort (GNU coreutils) 8.5' Sono in grado di riprodurre il comportamento descritto su Debian stable. – alk
@ MikeSherrill'Catcall 'Quando si tenta di ordinare numericamente un valore non numerico, l'ordinamento (1) torna all'ordinamento delle stringhe. '" 1001 3 "' ecc. Come per '-k2n' sono * non * numerici. – PointedEars