sort -uとuniqの違いを知りたいです。以下のコマンドを使用してファイル内の一意の文字列数を取得しようとしましたが、sort -uとuniqは私の知識に同じ出力を与えます。これが2つの異なるカウントを提供する理由です。
cat test.txt | sort -u | wc -l
351
cat test.txt | uniq | wc -l
370
2つの異なる行番号が表示されるのはなぜですか?
答え1
厳密に言うと、uniq
入力をソートする必要はありませんが、uniq
連続した重複行のみを削除します。
違いは次のとおりです。
sort
ファイルを並べ替え(適切な-u
オプションを使用して)、並べ替え後に連続した重複行も削除します。uniq
連続した重複行を削除します。また、重複した行のみを出力するオプションもあります(一つそれぞれ-d
、またはみんなcheat-D
)入力()に行が表示される回数を出力できます-c
。また、フィールドをスキップして1行でN文字を比較するなど、冗長検索方法を制御する他のオプションもあります。sort
もちろん、uniq
両方の機能を組み合わせたい場合は、入力出力をパイプすることができます。
sort -u
入力ファイルの順序を維持することに興味がない場合、または実際にソートしたいが、出力で重複したくない場合に便利です。
uniq
これは、入力順序を維持する必要がある場合や、すでにソートされたファイルを並べ替えて、CPUとIOPSを無駄にせずに単一化したい場合や、連続した段落を削除したい場合など、連続反復にのみ興味がある場合に便利です。間に改行(たとえば、pdftotext
行や段落の間に多くのスペースが生成されることがよくあります。uniq
読み取りや編集を容易にするために余分な部分を削除できます)。
答え2
uniq
入力をソートする必要があります。順序にずれる重複項目は削除されません。
~ printf %s\\n 1 2 1 | uniq
1
2
1
~ printf %s\\n 1 2 1 | sort | uniq
1
2
~ printf %s\\n 1 2 1 | sort -u
1
2