用于循环通过文件 - 多个条件

时间:2017-06-13 15:46:48

标签: bash loops for-loop awk

我有一个包含两列的文件,想要在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 )).

2 个答案:

答案 0 :(得分:1)

awk '{ sum += $2*($1-3); } END{ print sum; }' <input file>

答案 1 :(得分:0)

您已获得完全有效的awk answer。但是,如果您更喜欢使用bash,只要您只使用整数,就可以在bash中执行所有操作,而无需生成awkbc:< / p>

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