ОБНОВЛЕННЫЙ ОТВЕТ:
ПРОБЛЕМА:
ОП получает сообщение об ошибке « файл не в отсортированном порядке » при commсравнении положительных целых чисел в файлах, а не текста. Итак, мы имеем дело с недесятичными числами.
Короткий ответ:
В зависимости от использования -nпереключателя с sortкомандой, используемой для сортировки предоставленных результатов comm, порядок возвращаемых результатов commможет быть очень различным:
Лексография : использование -nпереключателя с сортировкой приведет к тому, что «положительные целые числа» будут упорядочены в серии возрастающих чисел. « Ошибка » может быть подавлена с помощью commключа--nocheck-order
Порядок байтов : НЕТ использования -n switchс sort. LC_COLLATEопределяет порядок, который может даже варьироваться в зависимости от того, как localeустановлен на хосте, на котором выполняется команда. Это вход commожидает по умолчанию. Немного больше о LC_COLLATEможно найти здесь: Reference1 и Reference2
Ошибка является проблемой?
Это зависит от того, чего вы пытаетесь достичь. Как вы увидите в примерах ниже,commвозвращает те же результатыпосле сравнения файлов с или без sort `S-nвыключателя, хотя их порядок будет меняться вышеописанным способомзависимости от того-n switchиспользуется сsortкомандой. Сам я предпочитаю «лексографические» упорядоченные результаты - числа, которые увеличиваются в серии.
Однако если вам не нужны результаты в « лексографическом » порядке, НЕ используйте -nпереключатель при сортировке данных, предоставленных commдля сравнения.
ИСПЫТАНИЯ:
Мы сравним результаты commкоманды с -nпереключателем и без него . Я увеличил сложность моего набора данных для испытаний образцов по запросу Кусалананды:
Тестовые данные :
file1.txt :
40
110000
2200
6
33000
file2.txt :
2200
40
33000
6
440000
Пересечение :
Перечислите только числа, общие для ОБА файлов
Без -nвыключателя:
comm -12 <(sort file1.txt) <(sort file2.txt)
2200
33000
40
6
Результаты : правильные, но возвращенные в несортированном порядке
С -n переключателем:
comm -12 <(sort -n file1.txt) <(sort -n file2.txt)
6
40
2200
33000
comm: file 1 is not in sorted order
Результаты : правильные, но возвращенные в порядке сортировки LEXOGRAPHIC . Операция завершилась успешно и вернула те же результаты, что и при использовании commбез -nпереключателя, но в отсортированном списке.
Разница :
Перечислите только числа, уникальные для каждого файла:
Без -nвыключателя:
comm -3 <(sort file1.txt) <(sort file2.txt)
110000
440000
Результаты : Правильно - эти числа действительно являются исключительными для каждого соответствующего файла.
С -n переключателем:
comm -3 <(sort -n file1.txt) <(sort -n file2.txt)
110000
comm: file 1 is not in sorted order
440000
Результаты : правильные, те же результаты, что и commбез -nпереключателя, но возвращает ошибку о порядке сортировки натуральных чисел в самих файлах.
РЕШЕНИЕ ДЛЯ ЛЕКСОГРАФИЧЕСКИХ РЕЗУЛЬТАТОВ:
Используйте переключатель comm`s --nocheck-orderдля подавления сообщения об ошибке. Поскольку мы знаем, что числа не отсортированы в каждом файле, но возвращаемые результаты comm -nверны, ошибку можно смело игнорировать, подавляя ее:
Пересечение :
comm -12 --nocheck-order <(sort -n file1.txt) <(sort -n file2.txt)
6
40
2200
33000
Разница :
comm -3 --nocheck-order <(sort -n file1.txt) <(sort -n file2.txt)
110000
440000
ВЫВОД:
Ошибка « файл не в отсортированном порядке », когда возвращаются отсортированные положительные целые числа comm, не означает, что результаты, возвращаемые с помощью -nпереключателя с comm, неверны. Действительно, использование comm -nвозвращает правильный порядок в отсортированном порядке!
Спасибо @dhag, @kusalananda @ChrisDown за то, что подняли вопросы, требующие дальнейшего расширения. Всегда рады тому, что мои работы проверены: единственный способ, которым мы можем стать лучше, - это если мы постоянно сталкиваемся с трудностями наших коллег.