linux bash 'sort' в порядке словаря - проблема с нулями - PullRequest
5 голосов
/ 24 июня 2010

Я вижу что-то странное с `sort 'в RedHat Enterprise Linux 5 x86_64 и в Ubuntu 9.1.Я использую bash.

Во-первых, вот что я считаю правильным ожидать от сортировки по порядку словаря:

[stauffer @ unix-m sortTrouble] $ cat st1
1230
123
100
11
10
1
123
1230
100

[stauffer @ unix-m sortTrouble] $ sort st1
1
10
100
100
11
123
123
1230
1230

[stauffer @ unix-m sortTrouble] $

Теперь вот что происходит, когда есть второй столбец (с разделителями табуляции, хотя здесь он выглядит грязно):

[stauffer @ unix-m sortTrouble] $ cat st2
1230 1
123 1
100 1
11 1
10 1
1 1
123 1
1230 1
100 1

[stauffer @ unix-msortTrouble] $ sort st2
100 1
100 1
10 1
1 1
11 1
1230 1
1230 1
123 1
123 1

Обратите внимание, как теперь порядок сортировки для столбца 1 отличается.«11» ставится правильно после «1», а «10» и «100» - нет.Аналогично для «1230».Кажется, что ноль вызывает проблемы.

Это поведение противоречиво, и это вызывает проблемы при использовании 'join', потому что он ожидает сортировку по словарю.

В Mac OSX 10.5 файл st2 сортируется как st1в первом столбце.

Я что-то упустил, или это ошибка?

Спасибо, Майкл

Ответы [ 2 ]

8 голосов
/ 24 июня 2010

со страницы руководства

   -b, --ignore-leading-blanks
          ignore leading blanks

   -g, --general-numeric-sort
          compare according to general numerical value

   -n, --numeric-sort
          compare according to string numerical value

ex:

andrey@localhost:~/gamess$ echo -e "1\n2\n10" | sort
1
10
2
andrey@localhost:~/gamess$ echo -e "1\n2\n10" | sort -g
1
2
10
4 голосов
/ 24 июня 2010

Сортировка может быть выполнена так, как вы хотите, ограничивая ключ интересующим вас столбцом:

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