bash, find nearest next value, forward and backward

前端 未结 4 1059
佛祖请我去吃肉
佛祖请我去吃肉 2021-01-16 08:51

I have a data.txt file

1    2     3    4      5       6        7   
cat data.txt
13 245 1323 10.1111 10.2222 60.1111 60.22222
13 133 2325 11.2222 11.333  61.         


        
4条回答
  •  长发绾君心
    2021-01-16 09:34

    Try this:

    $ cat tst.awk
    {
        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)
        print (minEqVal == "" ? "NaN" : minEqVal)
    }
    

    .

    $ awk -v fld=4 -v tgt=11.6667 -f tst.awk file
    12.3333
    11.2222
    NaN
    
    $ awk -v fld=6 -v tgt=62.9997 -f tst.awk file
    63.4444
    62.3333
    NaN
    
    $ awk -v fld=6 -v tgt=62.3333 -f tst.awk file
    63.4444
    61.2222
    62.3333
    

提交回复
热议问题