>我得到了一个包含两列的文件,并想在 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 )).
awk '{ sum += $2*($1-3); } END{ print sum; }' <input file>
你得到了完全有效的awk
答案。但是如果你更喜欢使用 bash
,只要你只在整数中操作,就可以在 bash
中做所有事情,而不需要生成awk
或bc
:
#!/bin/bash
sum=0
while read a b; do
((sum=sum+(a-3)*b))
done < file.txt
echo $sum