我试图在多行文件的每一行中生产产品,然后将其添加到后续行中,以此类推。
所以我基本上会选择
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
答案 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: :如果需要按排序顺序输出,可以使用sort
和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
}
}'
解决方案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