UNIX シェル スクリプトで同じ名前のすべてのファイルのサイズを追加する方法

UNIX シェル スクリプトで同じ名前のすべてのファイルのサイズを追加する方法

私はここに来たのが初めてです。同じ名前のファイルのサイズを追加する方法を教えてください。私のファイル名は実際にはそれぞれ異なりますが、グループ化されたファイルを取得できるようにカットしました。

ここにサイズ付きのオリジナルファイルがあります(サンプル)

sample.txt には次のデータが含まれています:

  1. 12345 a_1.txt
  2. 12234 b_1.txt
  3. 32123 c_1.txt
  4. 11122 a_2.txt

ここで、sample.txt 内のファイル名を切り取って、'_' (アンダースコア) で始まる文字を削除します。次のようになります。

  1. 12345 ...
  2. 12234 ベ
  3. 32123 c
  4. 11122 a

ここで、上記と同じファイル名を持つすべてのファイルのサイズを追加します。出力は次のようになります。

  1. 23467 a
  2. 12234 ベ
  3. 32123 c

助けてください。本当にありがとう。もう何時間もここに閉じ込められている

答え1

行番号がないと仮定しますsample.txt:

cut -f 1 -d _ sample.txt | awk '{a[$2] += $1} END{for (i in a) print a[i], i}'

| sort -k 2最後に追加するといいかもしれません。


編集1 - リクエストに応じた説明:

このcutコマンドは、区切り文字で各行を切り取り_、最初の部分のみを保存します。元のファイルではすでに実行されています。

次に、awkコマンドは各行に2つのフィールドを見つけます。これをサイズそして名前ですが、内部的にはとawkとして参照されます。行ごとに配列の要素が1つ増えます(名前は任意に選択され、サンプルのファイル名とは関係ありません)。$1$2aa名前 $2どの要素を増やすかを指定します。これはインデックスです。サイズ $1は増分値です。は、最初に言及したように、要素awkを初期化するのに十分賢いです。特定の要素は、そのインデックス(a0名前) は入力行の2番目のフィールドとして現れます。最後に (入力の最後の行の後)awkの既知のインデックスをすべて調べa、値 (現在は累積サイズ) とインデックス (名前)。

答え2

で始まるすべてのファイルの合計を取得するには、a_ 次のようにします。

du -c a_*  | grep total

duすべてのファイルのサイズを計算し、-cサイズを合計します。grep は、すべての個別のファイルではなく、合計のみを抽出します。

関連情報