For 循环遍历一个文件 - 多个条件



>我得到了一个包含两列的文件,并想在 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 中做所有事情,而不需要生成awkbc

#!/bin/bash
sum=0
while read a b; do
    ((sum=sum+(a-3)*b))
done < file.txt
echo $sum

最新更新