代表的なデータセットがあります。
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>line1
max2/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の間といえば数字自体も含まれるのでしょうか?私は彼らが提案された解決策にあると仮定します(それで>=
演算子)。私はnext
2つ以上のフィールドを持つ行を無視する習慣を持っています。私は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