我有这个数据:
300>BRIAN
100>DANY
200>NICOLE
105>DANY
我想生成以下内容:
300>BRIAN
205>DANY
200>NICOLE
分隔符是>
,第一列应该是 SUM。
答案1
强制性的GNU 数据混合解决方案
datamash -st '>' groupby 2 sum 1 < data | datamash -t '>' reverse
300>BRIAN
205>DANY
200>NICOLE
答案2
使用 awk:
awk -F\> '{pivot[$2]+=$1} END{for (x in pivot) print pivot[x]">"x}' infile.txt
输出是:
300>BRIAN
205>DANY
200>NICOLE
解释:
对于column2中的每个uniqe字段求和其相对第一列值,然后在最后循环枢轴数组并首先打印总和,然后打印相应的字符串。
答案3
使用 Miller 将数据读取为无标头 CSV 文件并>
作为字段分隔符,计算按第二个字段分组时第一个字段的总和。然后对结果字段重新排序,使具有总和的新字段位于第一个:
$ mlr --csv --fs '>' -N stats1 -a sum -f 1 -g 2 then reorder -f 1_sum file
300>BRIAN
205>DANY
200>NICOLE
指定的字段1_sum
由操作创建stats1
并包含总和。这是在reorder
操作中使用的。