Почему сортировка Linux не дает мне желаемых результатов?
Вопрос
У меня есть файл 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-му столбцу.Что я делаю не так?
Решение
Вы также должны указать конечную позицию равной 1:
sort -k1,1 -t, a.csv
Другие советы
Попробуйте это сделать: sort -t, -k1,1 a.csv
Мужчина предполагает, что, опустив поле end, он произведет сортировку по всем символам, начинающимся с field 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.
Попробуйте это вместо этого:
sort -k 1,1 -t , a.csv
сортировать чтения -k 1
как "сортировать начиная с первого поля и далее" - таким образом, фактически игнорируется смысл передачи аргумента в первую очередь.
Это задокументировано в сортировка справочной страницы и предупреждался об этом в разделе Примеров:
Выполните числовую сортировку по второму полю и разрешите связи путем сортировки в алфавитном порядке по третьему и четвертому символам пятого поля.Используйте `:' в качестве разделителя полей:
$ sort -t : -k 2,2n -k 5.3,5.4
Обратите внимание, что если бы вы написали
-k 2
вместо вместо-k 2,2
,sort
использовал бы все символы, начинающиеся во втором поле и продолжающиеся до конца строки в качестве основного числовой Клавиша.Для подавляющего большинства приложений обработка клавиш, охватывающих более одного поля, как числовых, не приведет к тому, чего вы ожидаете.