uniqユーティリティが予期しない結果を提供するのはなぜですか? [閉鎖]

uniqユーティリティが予期しない結果を提供するのはなぜですか? [閉鎖]

私はディレクトリ内のさまざまなファイルタイプを印刷するシェルスクリプトを作成しています。ほとんど動作しますが、奇妙な理由で出力にuniqを使用しようとすると機能しません。これは私の入力(および値$FILE_TYPE)です。

POSIX shell script, ASCII text executable
ASCII text
Bourne-Again shell script, ASCII text executable
UTF-8 Unicode text, with overstriking
Bourne-Again shell script, ASCII text executable

しかし、私が使うとき

FILE_TYPE_COUNT=`echo "$FILE_TYPE" | sort | uniq -c`

これが印刷されるものです

  1 POSIX shell script, ASCII text executable
  1 ASCII text
  1 Bourne-Again shell script, ASCII text executable
  1 UTF-8 Unicode text, with overstriking
  1 Bourne-Again shell script, ASCII text executable

当然そうです。

  1 POSIX shell script, ASCII text executable
  1 ASCII text
  2 Bourne-Again shell script, ASCII text executable
  1 UTF-8 Unicode text, with overstriking

私が間違っていることを知っていますか?

答え1

ファイルをフィルタリングする前にファイルをソートしません。 ~からマンページ:

注:uniq重複行は、隣接しない限り検出されません。最初に入力をソートするsort -uuniq。また、比較は指定された規則に従いますLC_COLLATE

また、処理する必要がありますみんな一度に計算する行数。現時点では、一度に1つのファイル形式を処理するため、uniq -c各ファイル形式の1つがあることを正確に伝えます。つまり、一度に1つのファイル形式しか表示できません。

file * | sort | uniq -c

より適切です(おそらく、より具体的なグローバル変数または処理するファイルのリストを使用している場合)。

関連情報