다음 형식의 텍스트 파일이 있습니다.
Item A,10-20
Item B,21-30
Item C,31-60
Item D,61-120
숫자가 있는 파일을 검색하고 두 번째 필드의 범위에 지정된 숫자가 포함된 행을 반환하려면 어떻게 해야 합니까?
그래서 내가 검색한다고 가정해 봅시다. 내가 검색하면 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
숫자를 강제로 비교합니다.