¿Por qué Linux no me está dando los resultados deseados?
Pregunta
Tengo un archivo a.csv con contenidos similares a los siguientes
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
Estoy intentando clasificarlo utilizando sort -k1 -t, a.csv
Pero está dando los siguientes resultados
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
Que no es la ordenación real en la primera columna. ¿Qué estoy haciendo mal?
Solución
También debe especificar la posición final para que sea 1:
sort -k1,1 -t, a.csv
Otros consejos
Prueba esto: sort -t, -k1,1 a.csv
El hombre sugiere que omitiendo el campo final, ordenará en todos los caracteres que comienzan en el campo n
hasta el final de la línea:
-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.
Prueba esto en su lugar:
sort -k 1,1 -t , a.csv
ordenar lee -k 1
como " ordenar desde el primer campo en adelante " - por lo tanto, desafiando efectivamente el punto de pasar el argumento en primer lugar.
Esto se documenta en la página de ordenación del hombre y se advierte en la sección de ejemplos:
Ordenar numéricamente en el segundo campo y resolver los lazos por clasificación alfabéticamente en el tercero y cuarto Caracteres del campo cinco. Utilice `: 'como el delimitador de campo:
$ sort -t: -k 2,2n -k 5.3,5.4
Tenga en cuenta que si ha escrito
-k 2
en su lugar de-k 2,2
,sort
habría usado todos personajes que comienzan en el segundo campo y que se extiende hasta el final de la línea como la clave numérica principal. por la gran mayoría de aplicaciones, tratamiento de claves que abarcan más de una campo como numérico no hará lo que tú esperar.