파일의 숫자가 두 열 사이에 있으면 다음 줄을 인쇄하십시오.

파일의 숫자가 두 열 사이에 있으면 다음 줄을 인쇄하십시오.

파일 1의 숫자 ID 목록을 두 개의 열과 일치시키고 싶습니다(각 행에는 다른 숫자/ID가 있음).

>cat file1
1 23444
3 422255223
1 35541 

그리고 첫 번째 열이 일치하고 두 번째 열 ID가 file2의 ID 사이에 있는 더 큰 파일(file2)의 행만 인쇄합니다.

>cat file 2
1 10 30 XP2
1 31 50 XP34
1 23000 25000 XP56
2 19000 30000 Xp9J

스크립트를 실행하고 일치하는 항목이 발견되면 이상적으로는 파일 1의 ID만 출력하고 열 간 일치 이후에 일치하는 열을 출력합니다. 예를 들면 다음과 같습니다.

 awk code file1 file2
 1 23444 XP56

여기에 게시된 문제에 가까운 해결책이 이미 있습니다. Awk - 숫자가 열 1과 2 사이에 있으면 행을 인쇄합니다.

하지만 두 열의 일치를 수용하고 파일(file1)을 한 줄씩 쿼리하도록 스크립트를 수정하는 데 어려움을 겪고 있습니다.

답변1

이 답변은 GNU-awk에만 해당됩니다. 배열의 배열을 사용합니다.

gawk '
    NR == FNR { f1[$1][$2] = 1; next }
    $1 in f1 {
        for (val in f1[$1]) {
            if (0+$2 <= 0+val && 0+val <= 0+$3) {
                print $1, val, $4
            }
        }
    }
' file1 file2

0+xif 조건의 비즈니스는 값이 문자열이 아닌 숫자로 비교되도록 보장합니다. 이것이 필요한 이유는비교해 보면, "10" <= "23444" <= "30"은진짜.

관련 정보