我正在尝试使用AWK获取所有路径和文件夹的总大小; 我的第一种方法是使用此脚本:
BEGIN { OFS=" " }
sub(/^\\/,"/") { path = $0; next }
path == "" { next }
match($0,/^(.*[^ ]) +A +([^ ]+) +(.*)/,a) { print substr(path,2) "\\ " a[2] }
但这为我提供了文件夹中每个文件的大小路径,而不是文件夹的总数,因此我认为需要使用 sum 。
这是我的输入:
README.txt A 45 Mon Aug 30 18:50:16 2018
Test Cases.xlsx A 1415577 Wed Aug 29 14:00:16 2018
\Qt Database EltraJo\DR0151-populated\DaJa\ASAA Images\k0097\Qingl
R0097A+05.00B-00-QingL.JPG A 6958377 Fri Jun 8 12:53:30 2018
R0097A+05.00B-00-QingLI.JPG A 2794933 Fri Jun 8 12:53:30 2018
R0097A-00.00B-00-QingLI.JPG A 2825705 Fri Jun 8 12:53:30 2018
R0097A-00.00B-00-QingLO.JPG A 1369520 Fri Jun 8 12:53:30 2018
Thumbs.db A 20480 13969015Fri Jun 8 13:14:41 2018
\QJ Database EltraJo\DR0151-populated\DaJa\ASAA Images\k0098\Qingl
R0098A+05.00B-00-QingL.JPG A 6958377 Fri Jun 8 12:54:30 2018
R0098A-00.00B-00-QingLO.JPG A 1369520 Fri Jun 8 12:54:30 2018
Thumbs.db A 20480 Fri Jun 8 13:14:41 2018
我的输出应该是这样的:
\Qt Database EltraJo\DR0151-populated\DaJa\ASAA Images\k0097\Qingl,13969015
\QJ Database EltraJo\DR0151-populated\DaJa\ASAA Images\k0098\Qingl,8348377
答案 0 :(得分:2)
这是一个重构,它似乎可以满足您的要求。
BEGIN { OFS="," }
/^\\/ { if(path) print path, sum; path = $0; sum = 0; next }
path == "" { next }
match($0,/^(.*[^ ]) +A +([^ ]+) +(.*)/,a) { sum+= a[2] }
END { if(path) print path, sum }'
诀窍是收集事物并在完成收集后打印结果。 (一个常见的初学者错误是忘记打印上一个集合。第二次在END
中使用相同的代码有些不妥,如果更复杂,我可以将其放在函数中。)
您似乎想要逗号分隔的输出,因此我们为此设置了OFS
。
三个参数match()
需要GNU Awk。
答案 1 :(得分:0)
为什么只需使用“ du”就为此而苦于“ awk”?
du -sh <dir_name>