shell插值:awk一行代码实现线性插值功能

awk一行代码实现线性插值功能

输入文件要求,第一列的数值为待插值数列,每一行必须大于等于上一行的数值。下面版本的输入文件共三列,后两列为插值数列对应的函数值。

 1 #!/bin/bash
 2 awk 'BEGIN{no=0}NR!=1{ 
 3     no=no+1;
 4     a[no]=$1; 
 5     b[no]=$2; 
 6     c[no]=$3;
 7     }END{
 8     print a[1],b[1],c[1]
 9     for (i=a[1]+0.01; i<a[no]; i+=0.01) {
10         jless=0;
11         jmore=0;
12         for (ele=1; ele<=no; ele++) {
13             if (a[ele]<=i) jless++
14             if (a[ele]>=i) jmore++
15         }; 
16         if ((jless+jmore)==no)
17             {j=jless
18             w1=(a[j+1]-i)/(a[j+1]-a[j]); 
19             w2=1.0-w1;} 
20         else
21             {j=jless; w1=1; w2=0}
22         print i,w1*b[j]+w2*b[j+1],w1*c[j]+w2*c[j+1] 
23     }
24     print a[no],b[no],c[no]
25 }'  input.dat > output.dat

 

posted @ 2022-01-05 16:00  Philbert  阅读(133)  评论(0编辑  收藏  举报