R 将一个文件的列和另一个文件的范围进行比较,并保留属于该范围的行

R 将一个文件的列和另一个文件的范围进行比较,并保留属于该范围的行,r,bash,awk,R,Bash,Awk,我有两个文件: 1A 2 b 我只需要为文件a的行子集,在这些行中,为了匹配chr,位置位于文件b的开始-停止范围内 我尝试了以下方法: awk 'NR==FNR{ range[$1,$2,$3]; next } FNR==1 { for(x in range) { split(x, check, SUBSEP); if($2==check[1] && $3>=check[2] && $3<=check[3]) print $0 }} ' b a

我有两个文件:

1A

2 b

我只需要为文件a的行子集,在这些行中,为了匹配chr,位置位于文件b的开始-停止范围内

我尝试了以下方法:

awk 'NR==FNR{ range[$1,$2,$3]; next }
FNR==1
{
for(x in range) {
split(x, check, SUBSEP);
if($2==check[1] && $3>=check[2] && $3<=check[3]) print $0
}}
' b a 
谢谢

x <- merge(a, b, by = 'chr')
x <- x[x$V3 >= x$start && x$V3 <= x$stop, ]
您可以将两个数据帧合并在一起,然后像以前一样进行过滤。

类似地,使用连接辅助awk

PS.文件需要按键字段排序

awk 'NR==FNR{ range[$1,$2,$3]; next }
FNR==1
{
for(x in range) {
split(x, check, SUBSEP);
if($2==check[1] && $3>=check[2] && $3<=check[3]) print $0
}}
' b a 
 a[a$V2 == b$chr && a$V3 >= b$start && a$V3 <= b$stop, ]
code    chr    position    score 
code456747     10      717559     1.0000000
code523452     10     1554421     0.5315330
code223534     10     2354490     0.0479356
code654321     10     4461920     0.9144420
code345635     10     5564649     0.7069120
x <- merge(a, b, by = 'chr')
x <- x[x$V3 >= x$start && x$V3 <= x$stop, ]
$ join -12 -21 a b | awk '$5<=$3 && $3<=$6{print $2,$1,$3,$4}'

code456747 10 717559 1.0000000
code523452 10 1554421 0.5315330
code223534 10 2354490 0.0479356
code654321 10 4461920 0.9144420
code345635 10 5564649 0.7069120
code214234 10 115746 0.7191680
code654332 10 133160 0.4205290
code263562 10 135203 0.7178790
code987654 10 230894 0.5351590