Bash - 如果数字在行中定义的范围内,则匹配行

Bash - 如果数字在行中定义的范围内,则匹配行

我有一个具有以下格式的文本文件:

Item A,10-20
Item B,21-30
Item C,31-60
Item D,61-120

如何使用任何数字搜索文件,并得到返回的行,其中包含第二个字段中的范围给出的数字。

所以可以说我搜索33我得到Item C
如果我搜索100我得到Item D等等......

(我的问题并不关注字段分离,而是关注匹配范围内的行,所以如果我要显示整行,那就没问题了)

答案1

较短的 awk:

$ awk -F'[,-]' -v s=11 's>=$2 && s<=$3' file1
Item A,10-20

$ awk -F'[,-]' -v s=100 's>=$2 && s<=$3' file1
Item D,61-120

$ awk -F'[,-]' -v s=61 's>=$2 && s<=$3' file1
Item D,61-120

正如评论中提到的,如果您只想打印标签,只需{print $1}在最后添加:

$ awk -F'[,-]' -v s=61 's>=$2 && s<=$3{print $1}' file1
Item D

答案2

像这样的东西吗?

$ awk -vval=33  -F, '{ label = $1; split($2, limits, "-"); } 
                     limits[1]+0 <= val && val <= limits[2]+0 {print label} ' < input
Item C

我们只是拆分,以分隔标签,然后拆分-以分隔下限和上限。+0强制比较数字。

相关内容