Почему параметры сортировки -c (проверка сортировки) и -o (запись в выходной файл) несовместимы?

Почему параметры сортировки -c (проверка сортировки) и -o (запись в выходной файл) несовместимы?

Я сортирую большое количество файлов один за другим. Использую sort -o file file. Цикл for остановился на полпути, и перед перезапуском я хочу использовать -cопцию sort для ускорения сортировки. Но он говорит, что -coопции несовместимы. Почему так?

sort --version
sort (GNU coreutils) 8.13

OS: Ubuntu 12.10

решение1

Потому что вы говорите ему, что хотите только --check, который не генерирует вывод, и вы также указываете, что хотите, чтобы отсортированный --output был отправлен в определенный файл. Это взаимоисключающие концепции, и они применяются в sort.c (gnu coreutils 8.20) с помощью

  if (checkonly)
    {

      if (outfile)
        {
          static char opts[] = {0, 'o', 0};
          opts[0] = checkonly;
          incompatible_options (opts);
        }

решение2

Если вы используете GNU sort, то упомянутые вами параметры выполняют следующие действия:

   -c, --check, --check=diagnose-first
          check for sorted input; do not sort
   -o, --output=FILE
          write result to FILE instead of standard output

Флаг -cпросто сообщит вам, отсортирован ли уже ввод:

$ echo -e "A\nB\nC" | sort -c
$ echo -e "A\nC\nB" | sort -c
sort: -:3: disorder: B

Итак, если вход отсортирован, ничего не печатается, а если вход не отсортирован, сообщение об ошибке печатается в стандартный вывод. Другими словами, sort -cникогда не печатает в стандартный вывод. Поскольку он никогда не печатает, нет смысла перенаправлять его вывод.

решение3

sort -c никогда не выводит результат. Он только проверяет файл. Без результата нет смысла записывать его в файл. Поэтому несовместимо с -o.

Вы можете использовать -c как своего рода проверку файла перед его сортировкой, но я не уверен, что это действительно ускорит процесс так, как вам хотелось бы.

решение4

Существует большая разница между проверкой сортировки файла и его сортировкой.

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

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

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