ソートオプション-c(ソートされていることを確認)と-o(出力ファイルの書き込み)が互換性がないのはなぜですか?

ソートオプション-c(ソートされていることを確認)と-o(出力ファイルの書き込み)が互換性がないのはなぜですか?

大量のファイルを順番にまとめています。使用sort -o file file。 forループが途中で停止して再開する前に、ソートを高速化するために-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つの項目で十分です(かなり高速です)。ソートされていない最初の項目でコマンドが終了してスキャンを完了できますが、この時点では出力が不完全で、最悪の場合はファイルがソートされます(この場合のみ出力の意味があります)。

並べ替えるファイルが多く、中断が頻繁に発生する場合は、並べ替える前に何らかの方法で完了したファイルを追跡する必要があります。

関連情報