
我是新來的,我想問如何添加同名檔案的大小?我的文件名實際上彼此不同,但我剪切了它們,這樣我就可以獲得分組在一起的文件。
這是我的原始文件的大小(樣本)
Sample.txt 中有以下數據:
- 12345a_1.txt
- 12234 b_1.txt
- 32123 c_1.txt
- 11122a_2.txt
現在,我剪下了sample.txt 中的檔案名,以刪除那些以「_」(底線)開頭的字元。他們變成這樣:
- 12345一個
- 12234乙
- 32123c
- 11122一個
現在我想添加具有相同文件名的所有文件的大小,如上所示。輸出應該是這樣的:
- 23467一個
- 12234乙
- 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 只提取全部檔案而不是所有單一檔案。