使用awk基于if语句插入数据

时间:2015-07-30 20:48:28

标签: bash awk interpolation

所以我试图通过使用awk搜索文件中的某个模式并将值插入线性插值公式来自动化数据收集过程。有问题的数据跟踪时间与位置,我需要插入位置等于零的时间。例如:

100  0.5
200  0.2
300  -0.3
400  -0.7

然后,我的插值看起来像这样:

interpolated_time = 200 +(0 - 0.2)*(300 - 200)/( - 0.3 - 0.2)

我将用bash编写脚本并使用bc计算器进行算术运算。但是,我对使用awk缺乏经验,无法弄清楚如何正确搜索文件。

我想做点什么

awk '{if ($2 > 0) #add another statement to test if $2 < 0 on next line#}'
# If test is successful, store entries in variables or an array

可能需要在一个文件中多次执行插值。我可能需要将所有有问题的值输出到数组,然后将配对的索引输入到插值公式中。 (即索引[1,2] [3,4] [5,6]配对在一起进行单独的插值)

我知道awk在逐行测试循环中工作,但我不知道是否有办法在测试中包含上一行或下一行(可能类似

next

getline

?)

非常感谢任何建议或意见!

1 个答案:

答案 0 :(得分:0)

这将为您提供结果240

awk '{if(p2>0 && $2<0) print p1-p2*($1-p1)/($2-p2); p1=$1; p2=$2}'
如果数据集中已经存在0并且假设转换从正到负,则

不处理。