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

时间:2018-08-15 03:32:10

标签: 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

1 个答案:

答案 0 :(得分:1)

如果我没看错,则需要在每一行中对第二列和第三列进行乘法运算,然后将它们添加到相同的第一列值中,那么下面的内容可能会对您有所帮助。

awk '{a[$1]=(a[$1]?a[$1]+($2 * $3):$2*$3)} END{for(i in a){print i,a[i]}}' Input_file

解决方案2: :如果需要按排序顺序输出,可以使用sortawk

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
  }
}'

解决方案3rd: :如果您需要具有与Input_file的第一个字段相同的输出顺序,则可能有帮助。

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