Perché linux sort non mi sta dando i risultati desiderati?
Domanda
Ho un file a.csv con contenuti simili al seguito
a,b,c
a ,aa, a
a b, c, f
a , b, c
a b a b a,a,a
a,a,a
a aa ,a , t
Sto provando a ordinarlo usando sort -k1 -t, a.csv
Ma sta dando i seguenti risultati
a,a,a
a ,aa, a
a aa ,a , t
a b a b a,a,a
a , b, c
a,b,c
a b, c, f
Quale non è l'ordinamento effettivo sulla prima colonna. Cosa sto sbagliando?
Soluzione
Devi anche specificare che la posizione finale deve essere 1:
sort -k1,1 -t, a.csv
Altri suggerimenti
Prova: sort -t, -k1,1 a.csv
L'uomo suggerisce che omettendo il campo finale, ordinerà su tutti i caratteri a partire dal campo n
fino alla fine della riga:
-k POS1[,POS2]'
The recommended, POSIX, option for specifying a sort field. The
field consists of the part of the line between POS1 and POS2 (or
the end of the line, if POS2 is omitted), _inclusive_. Fields and
character positions are numbered starting with 1. So to sort on
the second field, you'd use `-k 2,2' See below for more examples.
Prova invece:
sort -k 1,1 -t , a.csv
ordina leggi -k 1
come " ordina dal primo campo in poi " - in tal modo, sfidando in modo efficace il punto di passare l'argomento in primo luogo.
Questo è documentato nella pagina man sort e messo in guardia nella sezione Esempi:
Ordina numericamente sul secondo campo e risolvere i legami ordinando in ordine alfabetico il terzo e il quarto personaggi del campo cinque. Usa `: 'come il delimitatore di campo:
$ sort -t: -k 2,2n -k 5.3,5.4
Nota che se invece avessi scritto
-k 2
di-k 2,2
,ordina
avrebbe usato tutto personaggi che iniziano nel secondo campo e si estende fino alla fine del riga come chiave numerica primaria. Per la stragrande maggioranza delle domande, trattare le chiavi che coprono più di una campo come numerico non farà ciò che tu si aspettano.