使用awk或shell脚本在本地极端中查找全局最小值/最大值

时间:2015-06-04 05:40:17

标签: shell awk

我可以找到当地的分钟。或当地最大我的两个列数据(x,y)使用以下awk代码。

awk 'prev!=""&&prev<=prev2&&prev<=$2{print line}{prev2=prev;prev=$2;line=$0}' file # this is for local min.

awk 'prev!=""&&prev>=prev2&&prev>=$2{print line}{prev2=prev;prev=$2;line=$0}' file # this is for local max.

Qs的:

  1. 您能否在短期内解释上述代码?我刚刚使用并看到它有效,但不知道它是如何工作的......

  2. 如何在上述代码找到本地最小值/最大值后找到全局最小值/最大值?

1 个答案:

答案 0 :(得分:1)

本地最低限度解释

让我们考虑一下本地最小值的代码。它使用三个变量:

  • prev2是两行前第二列的值

  • prev是上一行第二列的值

  • line是上一行

代码由两部分组成:

  1. prev!="" && prev<=prev2 && prev<=$2 {print line}

    如果为prev分配了一个值(换句话说,如果我们不在第一行),并且该值小于prev2和当前第二列,{{1} },然后我们知道前一行是局部最小值,我们打印它。

  2. $2

    这里我们更新变量,以便在测试下一行时它们是正确的。

  3. 本地最大解释

    本地最大值的代码与本地最小代码完全相似,只是我们要求prev2=prev; prev=$2; line=$0大于prevprev2

    全球最低要求

    要查找第二列最小的行:

    $2

    全局最大值

    awk '!m || $2<m {m=$2; line=$0;} END{print line;}' file