1列の範囲から最大値を求め、2列を出力します。

1列の範囲から最大値を求め、2列を出力します。

代表的なデータセットがあります。

 35.5259  327   
 35.526  326   
 35.526  325  
 35.5261  324   
 35.5262  323   
 35.5263  322   
 35.5264  321   
 35.5265  320   
 35.5266  319  
 35.5268  318


# Contour 4, label:
 35.5269  317   
 35.527  316  
 35.5272  315  
 35.5274  314   
 35.5276  313   
 35.5278  312   
 35.528  311  

# Contour 4, label:
 35.5282  310  
 35.5285  309  
 35.5287  308  
 35.529  307  
 35.5293  306  

以下を使用して、2列の範囲で2つの最大値を見つけようとします。

awk '320>$2,$2>315 && $1>max1{max1=$1;line=$2} 313>$2,$2>307 && $1>max2{max2=$1;line2=$2} END {printf " %s\t %s\t %s\t %s\n",max1,line,max2,line2}' FILENAME

(txtファイルにスペースが多いため)空の出力が表示されます。どうすれば無視できますか? $1+0 == $1?

col1では320~315の間、col2では313~307の間の最大値を探したいと思います。必要な出力は次のとおりです。

35.5266  319   35.5278  312

希望の出力をどのように取得できますか?ありがとう

答え1

,に変更すると&&

しかし、私はあなたにも論理的なエラーがあると思います。と同じでなければ$1>max1なりませんか?$2>line1max2/line2

awk '
  320>$2 && $2>315 && $2>line1 {max1=$1;line1=$2}
  313>$2 && $2>307 && $2>line2 {max2=$1;line2=$2}
  END {printf " %s\t %s\t %s\t %s\n",max1,line1,max2,line2}
' file

答え2

pLumoの答えはサンプル出力を提供しますが、あなたの質問は最大値を見つけることです。1列目;例出力は最大値を出力します。2列目。だから私はあなたがあなたの質問や例の結果を間違って言及したと思います。そして320~315の間といえば数字自体も含まれるのでしょうか?私は彼らが提案された解決策にあると仮定します(それで>=演算子)。私はnext2つ以上のフィールドを持つ行を無視する習慣を持っています。私はBEGIN私が選択した変数を初期化するのに良い習慣に従います。

awk 'BEGIN {max1=max2=line1=line2=0}
     NF!=2 {next}
     320>=$2 && $2>=315 && $1>max1 {max1=$1;line1=$2}
     313>=$2 && $2>=307 && $1>max2 {max2=$1;line2=$2}
     END {printf " %s\t %s\t %s\t %s\n",max1,line1,max2,line2}' file.name.here

関連情報