特定の数値範囲内にある場合は、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このコマンドは2つのファイルを結合しますが、ファイルを区別することはできません。

答え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

関連情報