
私はここに来たのが初めてです。同じ名前のファイルのサイズを追加する方法を教えてください。私のファイル名は実際にはそれぞれ異なりますが、グループ化されたファイルを取得できるようにカットしました。
ここにサイズ付きのオリジナルファイルがあります(サンプル)
sample.txt には次のデータが含まれています:
- 12345 a_1.txt
- 12234 b_1.txt
- 32123 c_1.txt
- 11122 a_2.txt
ここで、sample.txt 内のファイル名を切り取って、'_' (アンダースコア) で始まる文字を削除します。次のようになります。
- 12345 ...
- 12234 ベ
- 32123 c
- 11122 a
ここで、上記と同じファイル名を持つすべてのファイルのサイズを追加します。出力は次のようになります。
- 23467 a
- 12234 ベ
- 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
$2
a
a
名前 $2
どの要素を増やすかを指定します。これはインデックスです。サイズ $1
は増分値です。は、最初に言及したように、要素awk
を初期化するのに十分賢いです。特定の要素は、そのインデックス(a
0
名前) は入力行の2番目のフィールドとして現れます。最後に (入力の最後の行の後)awk
の既知のインデックスをすべて調べa
、値 (現在は累積サイズ) とインデックス (名前)。
答え2
で始まるすべてのファイルの合計を取得するには、a_
次のようにします。
du -c a_* | grep total
du
すべてのファイルのサイズを計算し、-c
サイズを合計します。grep は、すべての個別のファイルではなく、合計のみを抽出します。