파일이 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