次の形式のテキストファイルがあります。
Item A,10-20
Item B,21-30
Item C,31-60
Item D,61-120
数字を含むファイルを検索し、2番目のフィールドの範囲に指定された数字を含む行を返すにはどうすればよいですか?
だから私が検索すると仮定しましょう。私が検索すると、私は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
数値を強制的に比較します。