awk:在if循环中处理NR的位置。下一个和以前的位置

aut_ut 发布于 2019-03-09 awk 最后更新 2019-03-09 14:36 3 浏览

我有这条线到我的bash脚本。

#Trying to find the FIRST maximum in the column $10
awk 'BEGIN{max=0} {if($10>=max){max=$10} else{exit}}  END{print NR}'
它的工作原理。 但我需要更复杂的东西(为了另一个目的)。我需要awk来检查下一行和前一行的值是否高于实际值(如下所示):
awk 'BEGIN{max=0} {if($10[NR]>=max && $10[NR-1]>=$10[NR] && $10[NR+1]>=$10[NR] ){max=$10} else{exit}}  END{print NR}'
但它不起作用,可能是因为我不知道如何处理列中的职位。你能帮我吗?
澄清: 我只想完全读取列(第10列)并找到在前一行和下一行中具有较高值的​​行号。例如,如果列的值为1,2,3,4,1,2,那么我想要得到行号“5”(对应于数据中的第二个),因为它是列中的行,它具有在它旁边有两个更高的值。
已邀请:

zex

赞同来自:

awk '{ if ($10 > old1 && old1 < old2) print NR-1; old2 = old1; old1 = $10; }'
为了测试,我用$1替换了$10。运行此数据:
1
2
3
4
3
4
5
4
3
2
1
2
3
4
5
4
5
4
3
2
1
它产生这个输出:
5
11
16