首页 > 解决方案 > 使用 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 中的任何单个命令。

标签: 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是您的数据文件。


推荐阅读