У меня есть файл foo.txt с этим содержанием:

chr1    15
chr11   5
chr11   8
chr1    7
chr2    23
chr1    35

Я попытался отсортировать сначала по первому столбцу, а затем по второму столбцу для разрыва связей с помощью следующей команды в оболочке linux:

sort -k 1,1 -k 2,2n foo.txt

Но результат странный:

chr1    7
chr1    15
chr11   5
chr11   8
chr1    35
chr2    23

Что я ожидал, так это:

chr1    7
chr1    15
chr1    35
chr11   5
chr11   8
chr2    23

РЕДАКТИРОВАТЬ Я проверил символы в файле с помощью od -fc foo.txt как было предложено в комментариях, странных символов не было. Вот результат:

0000000   3.5274972e-09   8.7240555e-33   3.5274972e-09    8.716562e-33
          c   h   r   1  \t   1   5  \n   c   h   r   1   1  \t   5  \n
0000020   3.5274972e-09   8.8610065e-33   3.5274972e-09   2.5496164e+21
          c   h   r   1   1  \t   8  \n   c   h   r   1  \t   7  \n   c
0000040   2.1479764e-33   2.5493397e+21   2.1359394e-33     9.37439e-40
          h   r   2  \t   2   3  \n   c   h   r   1  \t   3   5  \n
0000057

Я использую sort (GNU coreutils) 8.21 Есть идеи?

1 ответ1

1

Похоже, что настройки сортировки вашего региона, где проблема. Вы можете указать это в своей среде, тогда любая команда, которая использует это (включая sort), будет подчиняться этому:

export LC_COLLATE=C
sort -k 1,1 -k 2,2n foo.txt

Или вы можете указать это значение только на время самой сортировки

LC_COLLATE=C sort -k 1,1 -k 2,2n foo.txt       # or
env LC_COLLATE=C sort -k 1,1 -k 2,2n foo.txt

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .