【问题标题】:Using awk to interpolate data based on if statement使用 awk 根据 if 语句插入数据
【发布时间】:2015-07-30 20:48:28
【问题描述】:

所以我试图通过使用 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

?)

任何建议或 cmets 将不胜感激!

【问题讨论】:

    标签: bash awk interpolation


    【解决方案1】:

    这将为您提供结果240

    awk '{if(p2>0 && $2<0) print p1-p2*($1-p1)/($2-p2); p1=$1; p2=$2}'
    

    不处理如果 0 已经在数据集中并假设转换是从正到负。

    【讨论】:

    • 谢谢!我将不得不对其进行一些调整以满足我的需要,但这非常有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多