Bash - 숫자가 라인에 정의된 범위 내에 있으면 라인 일치

Bash - 숫자가 라인에 정의된 범위 내에 있으면 라인 일치

다음 형식의 텍스트 파일이 있습니다.

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

숫자가 있는 파일을 검색하고 두 번째 필드의 범위에 지정된 숫자가 포함된 행을 반환하려면 어떻게 해야 합니까?

그래서 내가 검색한다고 가정해 봅시다. 내가 검색하면 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숫자를 강제로 비교합니다.

관련 정보