Как работает утилита «sort»? (почему она не работает так, как я думаю?)

Как работает утилита «sort»? (почему она не работает так, как я думаю?)

У меня есть 2 текстовых файла:

$ cat /tmp/test1
"AAP" bar
"AEM" bar
"AA" bar
"AEO" bar
"A" bar

$ cat /tmp/test2
"AEM" foo
"AAP" foo
"A" foo
"AEO" foo
"AA" foo

Я хочу их отсортировать.

$ sort /tmp/test1
"AA" bar
"AAP" bar
"A" bar              <-- "A" is in position 3
"AEM" bar
"AEO" bar

$ sort /tmp/test2
"AA" foo
"AAP" foo
"AEM" foo
"AEO" foo
"A" foo              <-- "A" is in position 5

Почему "A"попадает впозиция 3 в/tmp/test1И впозиция 5 в/tmp/test2?

Я ожидаю, чтокаждый символ в столбцебудут сравниваться.

Таким образом, при сравнении столбца 3, 'A'и 'E'будут '"'сравниваться друг с другом, и это будет конечным фактором, определяющим окончательный порядок сортировки этих тестовых данных.

Очевидно, мои ожидания ошибочны, так как же все-таки это sortработает, если не так, как я ожидал?

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

решение1

Вам нужно изменить локаль сортировки. Описанное вами поведение типично для en_USи многих других локалей. Исправить с помощью:

LC_ALL=C   sort  /tmp/test1

Подробнее в этом ответе:https://stackoverflow.com/questions/6531674/linux-sort-unexpected-output

решение2

Может быть, он смотрит только на алфавитные символы? Поэтому в случае Aследующего алфавитного символа — это bстрока from.

Связанный контент