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