-uと-cを並べ替えて何をしますか?

-uと-cを並べ替えて何をしますか?

sortオプションのマニュアルページは次-uのように言います。

を使用すると-c厳密な順序を確認し、 を使用しない場合は-c最初の同じ実行のみを出力します。

誰かがこれを基本的な英語に翻訳するのに役立ちますか?この-ucオプションは-c

答え1

厳密な順序は、値を繰り返すことができないことを意味します。出力比較

printf "%s\n" 1 2 3 4 4 | sort -uc

それで

printf "%s\n" 1 2 3 4 4 | sort -c

答え2

オプションを使用すると、他のオプションを考慮して入力データが正しいソートであることが確認されます-c。ソートを実行しません。一部の実装では、次のように書くことができます。sortsortsort-c--check

したがって、sort -u -cデータを調べて、データがソートされていて重複したアイテムが含まれているかどうかを知らせます。ソートされていて重複項目がない場合は何も表示されませんが、重複項目がある場合、またはデータがソートされていない場合は診断メッセージが生成され、ゼロ以外の終了状態で終了します。

次の方法で使用できます。

if sort -uC file; then
   echo 'file is sorted and contains no duplicate entries'
else
   echo 'file is unsorted or contains duplicate entries'
fi

この-Cオプションは同じことを行います-cが、sort出力の生成を停止します。時にはまたはで-C書くこともできます。--check=quiet--check=silent

答え3

拡張分類マニュアル(info coreutils 'sort invocation')に記載されている内容は次のとおりです。

「 - ユニーク」

通常、同じと比較される一連の行のうち、最初の行のみが出力されます。 --check(-c または -C) オプションを使用すると、連続した行ペアが同じでないことを確認します。

つまり、-c(OK)と-u(ユニーク)を組み合わせると、論理的に入力に重複があるかどうかが確認されます.

たとえば、

%echo -e "a\na\nb\nc"| sort -c && echo OK
OK

%echo -e "a\na\nb\nc"| sort -uc && echo OK
sort: -:2: disorder: a

入力はソート(a->a->b->c)されていますが、重複して失敗-ucします。

関連情報