複数のサブディレクトリでの値の発生回数の計算

複数のサブディレクトリでの値の発生回数の計算

以下のディレクトリ構造を計算するために、次のスクリプトをどのように作成できますか?

dir1/diskname 
dir2/diskname
dir3/diskname
dir4/diskname

diskname には次の値が含まれます。

hitachi
samsung
LG

ディスク名の各ディレクトリを検索して値を計算するスクリプトが必要です。

たとえば、dir1,2,4 のファイルが hitachi で 3 が samsung の場合、結果は次のようになります。

hitachi 3
samsung 1 

答え1

パンキが提案したとおりコメントから:

cat dir*/diskname | sort | uniq -c

これにより、.dllを使用してdisknameすべてのファイルが1つのストリームにリンクされますcat。このsortユーティリティはデータをソートし、uniq -c各行の連続発生回数を計算します。

一般的に、以下があるとき数千filenameを使用すると、ファイル名のグロービングパターンがあまりにも多くのパス名に展開されるため、「引数リストが大きすぎます」というエラーでdisknameコマンドcatが失敗します。dir*/disknameこの場合、すべてのファイルを繰り返すことを選択できます。

for name in dir*/diskname
do
    cat "$name"
done | sort | uniq -c

または、次のものを使用できますfind(現在のディレクトリがdir*すべてのディレクトリを見つけることができる場所であると仮定)。

find . -maxdepth 2 -path './dir*/diskname' -type f -exec cat {} + | sort | uniq -c

関連情報