如何根据Awk中另一列中的值对列中的值求和

如何根据Awk中另一列中的值对列中的值求和,awk,Awk,输入: 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", "201

输入:

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]+=$4}END{for(i in a) print i,a[i]}' file
EDIT2:因为OP有旧的
awk
,其中
FPAT
不存在,所以根据示例,我添加了以下代码

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


编辑:因为OP完全更改了输入文件,所以现在添加此解决方案。使用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>1{gsub(/"/,"",$8);gsub(/"/,"",$6);a[$6]+=$8} END{for(i in a){print i,a[i] | "sort -k1"}}'  Input_file
awk -F"[[:space:]]*,[[:space:]]*" 'FNR>1{a[$3]+=$4} END{for(i in a){print i,a[i]}}' Input_file


您很接近,您的方法的问题是您没有在代码中将字段分隔符设置为
,但您的输入文件将分隔符设置为
,因此它根本没有
$3
,因此无法工作。你能试试下面的吗

awk -v FPAT='[^,]*|"[^"]+"' '{gsub(/\r/,"")} FNR>1{gsub(/"/,"",$8);gsub(/"/,"",$6);a[$6]+=$8} END{for(i in a){print i,a[i] | "sort -k1"}}'  Input_file
awk -F"[[:space:]]*,[[:space:]]*" 'FNR>1{a[$3]+=$4} END{for(i in a){print i,a[i]}}' Input_file

PS:多亏oguz ismail让我知道了字段分隔符集。

你想要的输出与我看到的实际输出完全相同,所以-你需要帮助的问题是什么?请编辑你的文章并将示例包装在代码标记中,请参阅这篇文章如何在上使用代码标记,因此这是一个XY问题。