У меня есть 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.