从命令行处理表格数据

从命令行处理表格数据

我有这个数据:

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操作中使用的。

相关内容