ファイルが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