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

时间:2013-04-11 16:14:12

标签: if-statement awk

我将这一行放入我的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”(对应于数据中的第二个1),因为它是列中的行旁边有两个更高的值。

1 个答案:

答案 0 :(得分:1)

awk '{ if ($10 > old1 && old1 < old2) print NR-1; old2 = old1; old1 = $10; }'

为了测试,我将$10替换为$1。运行此数据:

1
2
3
4
3
4
5
4
3
2
1
2
3
4
5
4
5
4
3
2
1

它产生这个输出:

5
11
16