我如何基于Awk中另一列中的值求和列中的值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我如何基于Awk中另一列中的值求和列中的值相关的知识,希望对你有一定的参考价值。

INPUT:

TT,SS,ECID,CDID,ODID,Symbol,Side,LastQty,LastPx,CumQty,AvgPx, 
"20191008-13:32:52","RO","0284","378MT","r7ot","SPD","1","100","290.67","400","290.67", 
"20191008-13:33:13","RO","02DJ","378MT","r7o","SPD","1","100","290.68","2248","290.655", 
"20191008-13:33:26","RO","FATS","378MTA","r7ot","PDF","1","100","290.92","2751","290.608",

输出应为:

SPD 200
PDF 100

尝试使用但不起作用

$ awk 'a[$3]+=$4ENDfor(i in a) print i,a[i]' file
答案

EDIT2:由于OP具有旧的awk,其中FPAT不存在,所以根据示例,我在代码中添加了以下代码。

awk -F, 'gsub(/\r/,"") FNR>1gsub(/"/,"",$8);gsub(/"/,"",$6);a[$6]+=$8 ENDfor(i in a)print i,a[i] | "sort -k1"' Input_file


EDIT:由于OP完全更改了Input_file,因此现在添加此解决方案。用GNU awk编写和测试。

awk -v FPAT='[^,]*|"[^"]+"' '
gsub(/\r/,"")
FNR>1
  gsub(/"/,"",$8)
  gsub(/"/,"",$6)
  a[$6]+=$8

END
  for(i in a)
    print i,a[i]
  

'   Input_file

或按字母顺序对输出进行排序,请尝试以下。

awk -v FPAT='[^,]*|"[^"]+"' 'gsub(/\r/,"") FNR>1gsub(/"/,"",$8);gsub(/"/,"",$6);a[$6]+=$8 ENDfor(i in a)print i,a[i] | "sort -k1"'  Input_file


[亲爱的,您的方法存在的问题是,您尚未在代码中将字段分隔符设置为,,但是Input_file的分隔符为,,因此它根本没有$3,因此无法正常工作。您可以尝试以下吗?

awk -F"[[:space:]]*,[[:space:]]*" 'FNR>1a[$3]+=$4 ENDfor(i in a)print i,a[i]' Input_file

PS:感谢oguz ismail通知了字段分隔符集。

以上是关于我如何基于Awk中另一列中的值求和列中的值的主要内容,如果未能解决你的问题,请参考以下文章

如何计算包含一组列中的值和 Pandas 数据框中另一列中的另一个值的行数?

如果同一行中另一列中的值匹配,如何比较列的两个值

使用 Filter 或 If Else 根据 R 中另一列中的值过滤指标

Excel:根据另一列中的值和映射值求和值

基于sql中另一列的一列中的最大数据

获取 ant.design 表列中另一列的值?