如何在特定位置对具有匹配字符的列求和?

时间:2019-04-29 20:02:37

标签: bash awk

我想为所有具有相同子文件夹字符的子文件夹添加du的输出。

我已经尝试过(示例)

du -s /aa/bb/cc/*/ | sort -k2.11,2.14

我将输出排序的位置

2000 /aa/bb/cc/1234/
1000 /aa/bb/dd/1234/
2000 /aa/bb/ff/1234/
2000 /aa/bb/cc/5678/
2000 /aa/bb/dd/5678/
3000 /aa/bb/ee/5678/
1000 /aa/bb/gg/5678/

现在,我想添加所有带有1234和5678的内容

预期结果

5000 -- 1234

8000 -- 5678

1 个答案:

答案 0 :(得分:0)

您可以使用倒数第二个字段的键,使用awk将第一个文件的所有内容存储到数组a中。

du -s /aa/bb/cc/*/ | sort -k2.11,2.14 |awk -F'/' '{a[$(NF-1)]+=$1}END{for(i in a) print a[i],i}'
8000 5678
5000 1234