我有一个代表性的数据集
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 列范围内的两个最大值:
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