我得到了一个有两列的文件,并希望在bash中编写一个for循环,该循环从第一列中获取值,减去3,然后将其乘以第二列中的相应值。然后将所有值相加在一起。
该文件如下所示:
1 3
2 5
7 8
4 30
然后我想要一个循环,它可以:
1-3 * 3
+ 2-3*5
+ 7-3*8
+ 4-3*30
我已经有了一个for循环,它看起来像这样:
for ( p in $( awk '{ print $1; }' file.txt )
do
total=$(echo $total+($p-3) | bc )
((count++))
done
echo " $total" | bc > file2.txt
这是可行的。但是,我可以做些什么来包含与文件的另一列的乘法呢?
以下想法不起作用:
for ( p in $( awk '{ print $1; }' file.txt ) && k in $( awk '{ print $2; }' file.txt )).
发布于 2017-06-13 23:52:19
awk '{ sum += $2*($1-3); } END{ print sum; }' <input file>
发布于 2017-06-13 23:53:26
您已经获得了完全有效的awk
answer。但是,如果您更喜欢使用bash
,只要您只对整数进行运算,您就可以在bash
中执行所有操作,而不需要生成awk
或bc
#!/bin/bash
sum=0
while read a b; do
((sum=sum+(a-3)*b))
done < file.txt
echo $sum
https://stackoverflow.com/questions/44526148
复制相似问题