1

输入文件

3000121 2
3000151 5
3000181 8
3000211 5
3000241 7
3000271 4
3000301 1
3000331 4
3000361 6
3000391 10
3000421 11
3000451 9
3000481 4
3000511 7
3000541 10
3000571 7
3000601 4
3000631 3
3000661 1

第一个字段表示 x 坐标,第二个字段表示 y 坐标。

输出文件应该是这样的

3000181 8
3000241 7
3000421 11
3000541 10
4

2 回答 2

2

您可以跟踪以前的记录并进行比较。如果你找到一个y比前一个大并且比下一个大的坐标,那么你已经找到了一个峰值并且可以打印它。

尝试以下操作:

$ awk '{x=$1;y=$2;if(y<py&&py>ppy){print px,py}ppy=py;py=y;px=x}' file
3000181 8
3000241 7
3000421 11
3000541 10
于 2013-06-25T08:11:54.577 回答
1

文件 a.awk:

{
   if ( ( NR - 1 ) in x && ( NR - 2 ) in x ) 
   {   
       if ( y[NR - 1] > y[NR - 2] && y[NR - 1] > $2 )
       {   
           printf "%d %d\n", x[NR -1], y[NR - 1]            
       }   
   }   

   x[NR] = $1
   y[NR] = $2
}

跑:

awk -f a.awk input_file
于 2013-06-25T08:08:13.293 回答