Unix сортировать по ключу комбинации буквенно-цифровых символов и ':', '/' - PullRequest
5 голосов
/ 04 ноября 2010

Я пытаюсь отсортировать текстовый файл с помощью команды UNIX sort (GNU 5.97 или 7.4) в соответствии с кодом ASCII. Строки в файле имеют один столбец, который используется в качестве ключа в сортировке.

chr1:110170896:NM_004037:0:1:0/1
chr1:110170897:NM_004037:0:1:0/1
chr11:10325325:chr11:0:1:0/1
chr11::0325325:chr11:0:1:0/1

Код ascii : равен 58, а 1 равен 49. Однако, когда я сортирую файл по sort -k 1,1 temp.txt, вывод будет таким,

chr11::0325325:chr11:0:1:0/1
chr1:110170896:NM_004037:0:1:0/1
chr1:110170897:NM_004037:0:1:0/1
chr11:10325325:chr11:0:1:0/1

Исходя из результата, я понятия не имею, как сортировка определяет порядок между 1 и :. Если был какой-либо фиксированный порядок, первая и четвертая строки должны быть помещены вместе.

В идеале я надеюсь отсортировать ключ от левого символа к правому символу в соответствии с кодом ASCII.

Ответы [ 3 ]

3 голосов
/ 04 ноября 2010

Со страницы руководства для сортировки GNU:

* ПРЕДУПРЕЖДЕНИЕ * Локаль, указанная средой, влияет на порядок сортировки. Установите LC_ALL = C, чтобы получить традиционный порядок сортировки, который использует собственные значения байтов.

Использование LC_ALL=C sort text (где text - это файл, в который я скопировал ваши образцы данных) на моей машине дает требуемый порядок сортировки.

Все еще нет объяснения, почему chr11 не сортируется вместе в исходном примере, хотя ...

3 голосов
/ 04 ноября 2010

как насчет

 sort -t : -k 1 filename

с использованием: в качестве разделителя полей

2 голосов
/ 04 ноября 2010

sort чувствительно к локали. Это будет зависеть от ваших настроек.

Вы должны попытаться установить язык на C, чтобы вернуться к порядку ASCII.

Скажите, запустите его как LANG=C sort -k 1,1 temp.txt или установите переменную среды

Если вам нужно объяснение неправильного порядка, было бы лучше указать вашу локаль / среду LANG, чтобы найти причину.

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