首页 > 解决方案 > 如何在特定位置对具有匹配字符的列求和?

问题描述

我想为具有某些相同子文件夹字符的所有子文件夹添加 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

标签: bashawk

解决方案


您可以使用第二个字段的键将第一个字段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

推荐阅读