unix - 使用 Unix 按多列分组(一列以逗号分隔,另一列以 sum )
问题描述
我有一个文本/csv 文件,如下所示:
EDMP_SCI|INACTIVE|12|AE
EDMP_SCI|INACTIVE|10|AO
EDMP_SCI|ACTIVE|20|IN
EDMP_SCI|ACTIVE|30|US
EDMP_EBBS|UNKNOWN|10|HK
我需要根据 column1 和 column2 进行分组
(第 3 列应该有数字的总和,第 4 列应该有逗号分隔的值)
所需的输出应如下所示:
EDMP_SCI|INACTIVE|22|AE,AO
EDMP_SCI|ACTIVE|50|IN,US
EDMP_EBBS|UNKNOWN|10|HK
我可以分别获得总和和逗号分隔的列,但我需要并行完成。我需要 Unix shell 脚本或 Unix 中的任何单个命令。
解决方案
您可以使用awk
.
例如:
awk -F '|' '{print $1 "|" $2 " " $3" " $4}' input | awk '{sum[$1]+=$2}{loc[$1]=loc[$1]$3","}END{for(c in sum){print c"|"sum[c]"|"substr(loc[c],0,length(loc[c])-1)}}'
input
是您的数据文件。
推荐阅读
- vhdl - Xilinx ISE 综合时序报告中的(异步控制信号信息)小节应该包括什么?
- python - 创建使用字典映射数据框中相应键、值的 Dataframe 列
- php - (PHP) If 语句有问题(它们不能正常工作)
- angular - Angular:如何从外部库中的组件中查找 Input 属性的数据类型
- ruby-on-rails - 设计 gem:具有多个登录策略的单个项目
- android - Android - setImageBitmap(bmp) 在创建视频缩略图后返回 null
- ios - 尾随关闭失败的 SwiftUI 菜单 (MenuStyleConfiguration)
- java - 无法将元素/项目拖到放置区域/容器中
- javascript - 在 GoogleMaps 中插入 JavaScript 会出错
- c - 有没有办法在 C 中自动命名输出 dat 文件?