Я сортирую большое количество файлов один за другим. Использую 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
Существует большая разница между проверкой сортировки файла и его сортировкой.
При проверке в лучшем случае достаточно двух записей (довольно быстро), на первой записи, которая не отсортирована, команда может выйти и проверка будет завершена, но на этом вывод будет неполным, в худшем случае файл будет отсортирован (только в этом случае вывод будет иметь смысл).
Если вам нужно отсортировать много файлов и вы часто прерываете работу, вероятно, вам следует каким-то образом отслеживать обработанные файлы, прежде чем снова приступать к сортировке.