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