如何在 UNIX Shell 腳本中新增所有同名檔案的大小

如何在 UNIX Shell 腳本中新增所有同名檔案的大小

我是新來的,我想問如何添加同名檔案的大小?我的文件名實際上彼此不同,但我剪切了它們,這樣我就可以獲得分組在一起的文件。

這是我的原始文件的大小(樣本)

Sample.txt 中有以下數據:

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

現在,我剪下了sample.txt 中的檔案名,以刪除那些以「_」(底線)開頭的字元。他們變成這樣:

  1. 12345一個
  2. 12234乙
  3. 32123c
  4. 11122一個

現在我想添加具有相同文件名的所有文件的大小,如上所示。輸出應該是這樣的:

  1. 23467一個
  2. 12234乙
  3. 32123c

請幫忙。非常感謝大家。我現在被困在這裡幾個小時了

答案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在最後添加。


EDIT1 - 依要求解釋:

cut命令用分隔符號剪切每一行_並僅保存第一部分。您已經使用原始文件完成了此操作。

然後該awk命令在每一行中找到兩個欄位。我們稱他們為尺寸姓名,但在內部awk將它們稱為$1$2。對於每一行,它都會增加數組的一個元素a(名稱a是任意選擇的,與範例中的檔案名稱無關)。這姓名 $2告訴要增加哪個元素-它是一個索引;這尺寸 $1是增量值。awk夠聰明,可以用第一次提到的方式初始化a元素。0每次其索引(姓名) 顯示為輸入行的第二個欄位。最後(在輸入的最後一行之後)awk遍歷每個已知的索引a並列印值(現在是累積大小)和索引(姓名)。

答案2

若要取得以您開頭的每個檔案的總數,a_ 可以執行以下操作:

du -c a_*  | grep total

du計算出所有檔案的大小,然後-c合計大小。 grep 只提取全部檔案而不是所有單一檔案。

相關內容