我有一个包含 3 列行(制表符分隔)的文件,例如:
2 45 100
还有一个包含 3 列行(制表符分隔)的第二个文件,例如:
2 10 200
如果两个文件中的 $1 匹配并且文件 1 中的 $2-$3 之间的范围与文件 2 中的 $2-$3 的范围完全相交,我想要一个匹配行的 awk 命令。它可以在文件 2 中的值范围内或者文件2中的范围可以在文件1中的范围内,或者它们可以只是部分重叠。范围之间的任何类型的相交都将被视为匹配,然后在文件 3 中打印该行。
我当前的代码仅在 $1 和 $2 或 $3 匹配时才匹配,但不适用于范围在彼此内时,因为在这些情况下精确数字不匹配。
awk '
BEGIN {
FS = "\t";
}
FILENAME == ARGV[1] {
pair[ $1, $2, $3 ] = 1;
next;
}
{
if ( pair[ $1, $2, $3 ] == 1 ) {
print $1 $2 $3;
}
}
示例输入:
文件1:
1 10 23
2 30 50
6 100 110
8 20 25
文件2:
1 5 15
10 30 50
2 10 100
8 22 24
这里第 1 行(file1)匹配第 1 行(file2),因为第一列匹配并且范围 10-15 在两个范围之间重叠 第 2 行(file1)匹配第 3 行(file2),因为第一列匹配并且 30-50 的范围在范围内10-100。第 4 行(file1)匹配第 4 行(file2),因为第一列匹配并且 22-24 范围在两者中重叠。因此输出将是 file2 中的第 1,2 和 4 行打印在新的输出文件中。
希望这些例子有所帮助。
非常感谢您的帮助。
先感谢您!