gpt4 book ai didi

perl - 查找输入值大于或等于键且记录未排序的最近键匹配

转载 作者:行者123 更新时间:2023-12-02 06:13:05 25 4
gpt4 key购买 nike

我有下面的输入文件,并试图找出输入值大于或等于键的最近键匹配。它在输入文件排序后起作用。

输入文件:

10,Line1
20,Line2
30,Line3
40,Line4
50,Line5
55,Line6
70,Line7
75,Line8
90,Line9
95,Line10
99,Line11

我试过的代码:

$ awk -F,  -v inp=85 ' NR==1 { dp=0 } {  dt=($1-inp); d=sqrt(dt*dt); if(d<=dp && inp >= $1 ) { rec=$0 } dp=d } END { print rec } ' source.txt
75,Line8

$ awk -F, -v inp=55 ' NR==1 { dp=0 } { dt=($1-inp); d=sqrt(dt*dt); if(d<=dp && inp >= $1 ) { rec=$0 } dp=d } END { print rec } ' source.txt
55,Line6

当 source.txt 按键列排序时,它工作正常,即第一个。但是当文件未排序时它会给出不正确的结果

$ shuf source.txt | awk -F,  -v inp=85 ' NR==1 { dp=0 } {  dt=($1-inp); d=sqrt(dt*dt); if(d<=dp && inp >= $1 ) { rec=$0 } dp=d } END { print rec } ' 
50,Line5 # Wrong

对于未排序的文件,这可以修复吗?

欢迎使用任何 unix 工具的解决方案!

最佳答案

你可以使用这个awk:

awk -F, -v n=85 'n>=$1 && (max=="" || $1>max){max=$1; rec=$0} END{print rec}' file

75,Line8

用不同的值再次运行:

awk -F, -v n=55 'n>=$1 && (max=="" || $1>max){max=$1; rec=$0} END{print rec}' file

55,Line6

关于perl - 查找输入值大于或等于键且记录未排序的最近键匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58942695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com