我可以找到当地的分钟。或当地最大我的两个列数据(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的:
您能否在短期内解释上述代码?我刚刚使用并看到它有效,但不知道它是如何工作的......
如何在上述代码找到本地最小值/最大值后找到全局最小值/最大值?
答案 0 :(得分:1)
让我们考虑一下本地最小值的代码。它使用三个变量:
prev2
是两行前第二列的值
prev
是上一行第二列的值
line
是上一行
代码由两部分组成:
prev!="" && prev<=prev2 && prev<=$2 {print line}
如果为prev
分配了一个值(换句话说,如果我们不在第一行),并且该值小于prev2
和当前第二列,{{1} },然后我们知道前一行是局部最小值,我们打印它。
$2
这里我们更新变量,以便在测试下一行时它们是正确的。
本地最大值的代码与本地最小代码完全相似,只是我们要求prev2=prev; prev=$2; line=$0
大于prev
或prev2
。
要查找第二列最小的行:
$2
awk '!m || $2<m {m=$2; line=$0;} END{print line;}' file