Awk 两列的乘积n,添加到下一行,依此类推

Awk 两列的乘积n,添加到下一行,依此类推,awk,pipe,multiple-columns,Awk,Pipe,Multiple Columns,我试图在多行文件中的每一行生成产品,并将其添加到后续行,以此类推 所以我基本上会同意 awk '{print $1 "/t" ($2 * $3)' filename > temp 如何为第1列中的每个唯一id循环此操作?下面是示例数据 样本数据 name1 14 10 name1 48 10 name2 23 98 name3 90 28 name4 83 6 name4 5 3 name3 15 7 如果我读得正确,你需要在每

我试图在多行文件中的每一行生成产品,并将其添加到后续行,以此类推

所以我基本上会同意

awk '{print $1 "/t" ($2 * $3)' filename > temp
如何为第1列中的每个唯一id循环此操作?下面是示例数据

样本数据

name1   14   10
name1   48   10
name2   23   98
name3   90   28
name4   83   6
name4   5    3
name3   15   7

如果我读得正确,你需要在每行中乘以第2列和第3列,然后将它们添加到相同的第1列值。如果是这种情况,那么下面可能会对你有所帮助

awk '{a[$1]=(a[$1]?a[$1]+($2 * $3):$2*$3)} END{for(i in a){print i,a[i]}}' Input_file
解决方案2:您可以使用
排序
awk
,以防需要按排序顺序输出

sort -k1 Input_file |
awk '
prev!=$1 && prev{
  print prev,total
  total=prev=""
}
{
  total+=($2*$3)
  prev=$1
}
END{
  if(prev && total){
    print prev,total
  }
}'
解决方案3:如果您需要与输入文件的第一个字段具有相同的输出顺序,那么下面可能会有所帮助

awk '
!a[$1]++{
  b[++count]=$1
}
{
  c[$1]=(c[$1]?c[$1] + ($2*$3):($2*$3))
}
END{
  for(i=1;i<=count;i++){
    print b[i],c[b[i]]
  }
}'  Input_file

感谢您为解决问题所做的努力,请务必在您的帖子中添加预期的输出。为没有让它更清楚而道歉。@认真的,不需要道歉我们都在这里学习,继续学习,并在这个伟大的网站上分享知识。
name1 620
name2 2254
name3 2625
name4 513