Почему сортировка Linux не дает желаемых результатов? - PullRequest
0 голосов
/ 26 ноября 2009

У меня есть файл a.csv с содержимым, аналогичным приведенному ниже

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

Я пытаюсь отсортировать его с помощью sort -k1 -t, a.csv Но это дает следующие результаты

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

Что не является фактической сортировкой в ​​1-м столбце. Что я делаю не так?

Ответы [ 3 ]

2 голосов
/ 26 ноября 2009

Попробуйте: sort -t, -k1,1 a.csv

Человек предлагает опустить поле конца, он будет сортировать по всем символам, начиная с поля n до конца строки:

-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.
2 голосов
/ 26 ноября 2009

Попробуйте вместо этого:

sort -k 1,1 -t , a.csv

sort читает -k 1 как «сортировка от первого поля и далее» - таким образом, эффективно игнорируя точку передачи аргумента в первую очередь.

Это задокументировано в справочной странице sort и предупреждено в разделе примеров:

Числовая сортировка по второму полю и решить связи путем сортировки по алфавиту на третьем и четвертом символов поля пять. Используйте `: 'как разделитель поля:

$ sort -t : -k 2,2n -k 5.3,5.4

Обратите внимание, что если вы написали -k 2 вместо из -k 2,2, sort использовал бы все символы начинающиеся со второго поле и простирается до конца линия в качестве основной числовой ключ. За подавляющее большинство приложений, обработка ключей, охватывающих более одного поле в виде числа не будет делать то, что вы ожидать.

2 голосов
/ 26 ноября 2009

Вы также должны указать конечную позицию равной 1:

sort -k1,1 -t, a.csv
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...