파일 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+x
if 조건의 비즈니스는 값이 문자열이 아닌 숫자로 비교되도록 보장합니다. 이것이 필요한 이유는끈비교해 보면, "10" <= "23444" <= "30"은진짜.