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?

È stato utile?

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.

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