当一个或另一个字段落在另一个文件中定义的范围中时,打印两个记录



我有file1

A 1 
A 7 
B 3  
B 7  

和file2

A 2 3 
A 6 8 
A 7 100 
B 1 3 
B 4 10 
B 700 800 

我试图在两个文件中打印记录,其中对于两个匹配的$1,file2中的$2或$3在file1中的$2和$2 + 5之间

输出为

A 2 3 A 1 
A 6 8 A 7 
A 7 100 A 7
B 1 3 B 3
B 3 10 B 3    
B 3 10 B 7

我有下面的工作,但我只能打印记录在一个文件

FNR==NR {
n = ++q[$1]
min[$1 FS n] = $2
max[$1 FS n] = $2 + 5
next
}
# process file1
n = q[$1] { # if no q entry, line cannot be in range
for (i=1; i<=n; i++)
if ( min[$1 FS i]<=$2 && $2<=max[$1 FS i] || min[$1 FS i]<=$3 && $3<=max[$1 FS i]) {
print
next
}
}

如果file1中的一个字段在file2中的多个范围内,则该记录可以重复

请尝试以下操作:

awk '
# process file1
NR==FNR {
q[++n] = $0
f1[n] = $1
f2[n] = $2
next
}
# process file2
{
for (i = 1; i <= n; i++) {
if ($1 == f1[i] && ($2 >= f2[i] && $2 <= f2[i] + 5 ||
$3 >= f2[i] && $3 <= f2[i] + 5))
print $0, q[i]
}
}' file1 file2

提供示例文件的输出:

A 2 3 ... A 1 ...
A 6 8 ... A 1 ...
A 6 8 ... A 7  ...
A 7 100 ... A 7  ...
B 1 3 ... B 3  ...
B 4 10 ... B 3  ...
B 4 10 ... B 7  ...

最新更新