我有一个具有以下格式的文本文件:
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
强制比较数字。