我有一个文件,其中包含从最小到最大的整数范围,每行一个范围:
"1","3"
"4","7"
"8","10"
"11","13"
"14","20"
我需要获取适合给定数字的范围的行号。
例如: 如果给定的数字是2,则它应该为第1行返回1,因为2落在1和3之间。
如果给定的数字是3,它仍然应该为第1行返回1。
如果给定的数字是9,则第3行应该返回3,因为9落在8到10之间。
答案 0 :(得分:2)
纯shell解决方案,假设您的文件格式与您的示例完全相同:
function lineFor {
local -i target=$1 line=1 a b
local file=$2
while IFS=\" read _ a _ b _; do
if (( a <= target && target <= b )); then
echo $line
return 0
fi
let line+=1
done <"$file"
}
行动中:
$ cat -n ranges.txt
1 "1","3"
2 "4","7"
3 "8","10"
4 "11","13"
5 "14","20"
$ lineFor 5 ranges.txt
2
答案 1 :(得分:1)
您也可以使用awk
快速完成此操作:
sed "s/\"//g" yourfile | awk -F, -v var=$yournumber '$1<=var && $2>=var {print NR}'
我们在这里只是使用sed
来摆脱双引号字符串封装。然后,awk
将用逗号分隔,并将$yournumber
变量与文本文件中的第一个和第二个字段进行比较。如果找到匹配,它将吐出记录编号(NR
)。