大量のファイルを次々にソートしています。 を使用していますsort -o file file
。 for ループが途中で停止したので、再開する前に sort のオプションを使用してソートを高速化したいと思います-c
。 しかし、-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
ファイルがソートされているかどうかを確認することと、ファイルをソートすることには大きな違いがあります。
チェックする場合、最良のケースでは 2 つのエントリで十分です (かなり高速)。ソートされていない最初のエントリではコマンドが終了し、チェックが完了しますが、この時点では出力は不完全になります。最悪のケースは、ファイルがソートされている場合です (この場合にのみ出力が意味を成します)。
並べ替えるファイルが多く、頻繁に中断する場合は、再度並べ替える前に、完了したファイルを何らかの方法で追跡する必要があります。