【发布时间】:2019-05-02 05:32:13
【问题描述】:
我最近在网站上发现了一个脚本:
bash, find nearest next value, forward and backward
那是相对较旧的,需要 50 个代表才能发表评论,而我没有。我正在尝试让它工作,并且不太了解 awk 语法,但我正在尝试。在我正在使用的测试文件中:
-3.793 0.9804E+00 0.3000E+02
-3.560 0.1924E-01 0.3000E+02
-3.327 0.3051E-04 0.3000E+02
-3.093 0.3567E-08 0.3000E+02
-2.860 0.3765E-06 0.3000E+02
-2.627 0.1119E-02 0.3000E+02
-2.394 0.2520E+00 0.3006E+02
这是脚本:
{
if ($fld > tgt) {
del = $fld - tgt
if ( (del < minGtDel) || (++gtHit == 1) ) {
minGtDel = del
minGtVal = $fld
}
}
else if ($fld < tgt) {
del = tgt - $fld
if ( (del < minLtDel) || (++ltHit == 1) ) {
minLtDel = del
minLtVal = $fld
}
}
else {
minEqVal = $fld
}
}
END {
print (minGtVal == "" ? "NaN" : minGtVal)
print (minLtVal == "" ? "NaN" : minLtVal)
}
其中,当这样运行时:
$ awk -v fld=1 -v tgt=-3 -f awk DOSCAR
产生:
-2.860
NaN
即使有一个下限,我也不太确定如何解决它。原始帖子中没有负数,所以他们没有这个问题。任何帮助表示赞赏。
【问题讨论】:
-
这是一个纯 awk 脚本——里面根本没有 bash,而且问题不应该有
bash标记。 (想想如果有人问“我如何在 bash 中做 X”,并得到一个使用 python 的答案——关于该答案的后续问题是 python 问题,而不是 bash 问题)。 -
顺便说一句,这个问题写得并不理想——您还应该展示您的预期输出,并描述实际输出错误的原因。