比较 2 个文件(如果它位于某个数字范围内)

比较 2 个文件(如果它位于某个数字范围内)

我有2个文件,

文件一:

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

相关内容