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
本文来自博客园,作者:Philbert,转载请注明原文链接:https://www.cnblogs.com/liangxuran/p/15767454.html