我有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