bash - 如何在特定位置对具有匹配字符的列求和?
问题描述
我想为具有某些相同子文件夹字符的所有子文件夹添加 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
解决方案
您可以使用第二个字段的键将第一个字段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
推荐阅读
- python - 使用Django删除postgresql数据库中的所有表而不删除数据库
- java - 停止 Java 时不执行存储过程
- sql - SQL 查询通过关联来自两个表的两个单独的单元来从一个表中划分一个值
- cuda - 如何禁用有关不确定堆栈大小的 ptxas 警告?
- django - 如何在 React 中访问 Django 会话
- spring-boot - 将一个 docker 容器中的 Spring Boot 应用程序连接到另一个容器中的 Cassandra 数据库
- javascript - Mongo&Express - 避免客户多次触发相同请求的实用方法是什么?
- java - 等效于 @BeforeClass 的 TestNG 侦听器,可以访问上下文
- c - (gstreamer) 实现无缝速度变化?
- firefox - 有没有办法将 Emmet 与 Firefox 开发者工具一起使用?