특정 숫자 범위 내에 있는 경우 2개의 파일을 비교합니다.

특정 숫자 범위 내에 있는 경우 2개의 파일을 비교합니다.

파일이 2개 있는데,

파일 1:

4
7
2

파일 2:

1 5 Alpha
6 10 Bravo
11 15 Charlie
16 21 Delta
22 30 Echo

파일 1의 각 항목이 파일 2의 열 1과 열 2 사이에 있는지 비교하고 싶고(파일 2 전체를 확인해야 함) 일치하면 파일 1의 해당 열 1과 파일 2의 열 3이 인쇄되어야 합니다. 목록 .

사용해 보았는데,paste file1 file2 | awk '$1>$2+0 && $1<$3+0 {print $1,$4}'

하지만 작동하지 않는 것 같습니다.

달리는 동안,paste file1 file2 | awk '{print $1}'

다음과 같이 출력됩니다.

4
7
2
16
22

paste이 명령은 두 파일을 결합하지만 파일을 구분할 수 없습니다.

답변1

다음을 시도해 볼 수 있습니다 awk.

awk 'NR == FNR { x[$1] = $1+0; next; } { for (i in x) { if (x[i] > $1+0 && x[i] < $2+0) { print x[i], $3; } } }' file1 file2

결과는 다음과 같습니다.

4 Alpha
2 Alpha
7 Bravo

답변2

그냥 재미로, Perl:

perl -MPath::Class -lne '
    BEGIN {@codes = map {[split]} file("file2")->slurp; $, = " "}
    $val = $_;
    ($code) = grep {$_->[0] <= $val && $val <= $_->[1]} @codes;
    print $val, $code->[2];
' file1

관련 정보