如何获取给定数字的适当范围的行号?庆典

时间:2015-10-28 15:46:01

标签: bash

我有一个文件,其中包含从最小到最大的整数范围,每行一个范围:

"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之间。

2 个答案:

答案 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)。