Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Unix按多列分组(一列用逗号分隔,另一列用sum分隔)_Unix - Fatal编程技术网

使用Unix按多列分组(一列用逗号分隔,另一列用sum分隔)

使用Unix按多列分组(一列用逗号分隔,另一列用sum分隔),unix,Unix,我有一个文本/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 我需要根据第1列和第2列进行分组 第3列应该有数字之和,第4列应该有逗号分隔的值 所需的输出应如下所示: EDMP_SCI|INACTIVE|22|AE,AO EDMP_SCI|ACTIVE|50|IN,US EDM

我有一个文本/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
我需要根据第1列和第2列进行分组

第3列应该有数字之和,第4列应该有逗号分隔的值

所需的输出应如下所示:

EDMP_SCI|INACTIVE|22|AE,AO

EDMP_SCI|ACTIVE|50|IN,US

EDMP_EBBS|UNKNOWN|10|HK
我可以分别得到sum和逗号分隔的列,但是我需要并行地完成。我需要通过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)}}'
输入是您的数据文件