Вывод из сортировки не выглядит отсортированным - PullRequest
0 голосов
/ 29 октября 2019

У меня есть следующий текстовый файл (sort_test.txt):

PGA_scaffold1__77
PGA_scaffold2__36
PGA_scaffold3__111
PGA_scaffold4__129
PGA_scaffold5__109
PGA_scaffold6__104
PGA_scaffold7__69
PGA_scaffold8__63
PGA_scaffold9__45
PGA_scaffold10__49
PGA_scaffold11__79
PGA_scaffold12__71
PGA_scaffold13__52
PGA_scaffold14__91
PGA_scaffold15__101
PGA_scaffold16__33
PGA_scaffold17__51
PGA_scaffold18__69

Когда я пытаюсь отсортировать файл с помощью следующего кода, вывод сортировки кажется не в порядке (в частности, строки 9и 10):

IN: awk -F"_" '{print $1"_"$2"_"$3"_"$4}' sort_test.txt | sort

OUT:

PGA_scaffold10__49
PGA_scaffold11__79
PGA_scaffold12__71
PGA_scaffold13__52
PGA_scaffold14__91
PGA_scaffold15__101
PGA_scaffold16__33
PGA_scaffold17__51
PGA_scaffold1__77
PGA_scaffold18__69
PGA_scaffold2__36
PGA_scaffold3__111
PGA_scaffold4__129
PGA_scaffold5__109
PGA_scaffold6__104
PGA_scaffold7__69
PGA_scaffold8__63
PGA_scaffold9__45

Почему строки 9 и 10 выглядят не в порядке?

Желаемый результат:

PGA_scaffold10__49
PGA_scaffold11__79
PGA_scaffold12__71
PGA_scaffold13__52
PGA_scaffold14__91
PGA_scaffold15__101
PGA_scaffold16__33
PGA_scaffold17__51
PGA_scaffold18__69
PGA_scaffold1__77
PGA_scaffold2__36
PGA_scaffold3__111
PGA_scaffold4__129
PGA_scaffold5__109
PGA_scaffold6__104
PGA_scaffold7__69
PGA_scaffold8__63
PGA_scaffold9__45

Если я изменяю код для печати только первых трех полей, сортировка делает то, что я ожидаю:

IN: awk -F"_" '{print $1"_"$2"_"$3}' sort_test.txt | sort

OUT:

PGA_scaffold1_
PGA_scaffold10_
PGA_scaffold11_
PGA_scaffold12_
PGA_scaffold13_
PGA_scaffold14_
PGA_scaffold15_
PGA_scaffold16_
PGA_scaffold17_
PGA_scaffold18_
PGA_scaffold2_
PGA_scaffold3_
PGA_scaffold4_
PGA_scaffold5_
PGA_scaffold6_
PGA_scaffold7_
PGA_scaffold8_
PGA_scaffold9_

Итак, похоже, что что-то в четвертом поле влияет на сортировку, но не понятно почему.

Проблема в том, что мне нужна начальная сортировка, нопоменялись местами строки 9 и 10.

У кого-нибудь есть мысли о том, почему сортировка происходит таким образом и как я могу изменить ее так, чтобы получить ожидаемый результат?

1 Ответ

0 голосов
/ 30 октября 2019

Большое спасибо @Barmar за указание на форум Unix & Linux !

Мне удалось косвенным образом найти ответ на мою проблему в этом сообщении:

Не нарушена ли сортировка gnu coreutils?

Решение было изменить мою локаль!

Моя локаль выглядела так:

$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

После запуска:

$ export LC_COLLATE=C

Мне удалось получить желаемый результат сортировки.

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