Bash - 数値が行で定義された範囲内にある場合、行の一致

Bash - 数値が行で定義された範囲内にある場合、行の一致

次の形式のテキストファイルがあります。

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

数字を含むファイルを検索し、2番目のフィールドの範囲に指定された数字を含む行を返すにはどうすればよいですか?

だから私が検索すると仮定しましょう。私が検索すると、私は33等を取得します...Item C
100Item 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数値を強制的に比較します。

関連情報