![比较 2 个文件(如果它位于某个数字范围内)](https://linux22.com/image/67706/%E6%AF%94%E8%BE%83%202%20%E4%B8%AA%E6%96%87%E4%BB%B6%EF%BC%88%E5%A6%82%E6%9E%9C%E5%AE%83%E4%BD%8D%E4%BA%8E%E6%9F%90%E4%B8%AA%E6%95%B0%E5%AD%97%E8%8C%83%E5%9B%B4%E5%86%85%EF%BC%89.png)
我有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