- 论坛徽章:
- 0
|
数据f3.txt:
3 21 32 37 2 59
6 29 35 37 1 57
直接代入值执行awk '{print $4*1+$5*10}' f3.txt得到的结果是:
57
47
写的代码如下:
1 #!/bin/sh
2 k=(0 10 100)
3 w1=3
4 w2=2
5 while read line;
6 do
7 #echo $line;
8 for((i=1;i<=$w2;i++))
9 do
10 ((var1=$[$w1+$i]))
11 ((var2=$[${k[$i]}]))
12 echo $var1,$var2
13 awk -v var1=$var1 -v var2=$var2 '{total+=$var1*var2}END{print total}'
14 done
15 #echo $[var+=$var]
16 done <f3.txt
结果:
3,1
0
4,256
[admin@CentOS help]$
var1和var2为了确定列的位置,然后再相加,但确定第二个位置时却为空值,为何?然后后面就没法再继续了,请教各位大大解决之道。
awk本来已经是一行一行读入,但好像又不得不用while read 一行一行来读入计算,真是头大。
觉得很简单的一个计算,但好像shell好难,perl实现觉得容易一些。
以下是perl实现:
1 #!/usr/bin/perl
2 @k=(1,10,100);
3 $w1=3;
4 $w2=2;
5 open(FD_LOG,"f3.txt");
6 while(<FD_LOG>)
7 {
8 @arr=split(/ /,$_);
9 $zhi=0;
10 for($i=0;$i<$w2;$i++)
11 {
12 $zhi=$arr[$w1+$i]*$k[$i]+$zhi;
13 }
14 print $zhi."\n";
15 }
请教请教大大们。。。。。。。。
|
|