我有两个输入文件
File A
chr1 1167639 0
chrX 114868305 14
chr1 1167653 0
chr11 62389325 2
chr9 140127768 17
File B
chr10 73082492 73082831 SLC29A3
chr11 46332562 46332760 CREB3L1
chr11 62389317 62389439 B3GAT3
chrX 22056566 22056675 PHEX
chrX 114868291 114868413 PLS3
这是我想要的输出
chrX 114868305 14 chrX 114868291 114868413 PLS3
chr11 62389325 2 chr11 62389317 62389439 B3GAT3
我想要的是:在文件B的第1列中找到文件A的第1列元素。如果字符串相同,则取文件A的第2列的编号,并检查它是否包含在文件B的编号范围内文件 B 的第 2 列和第 3 列。如果包含,则在输出中将文件 A 和文件 B 的行打印在一行中。
答案1
$ cat tst.awk
BEGIN { OFS="\t" }
NR==FNR {
++cnt[$1]
beg[$1,cnt[$1]] = $2
end[$1,cnt[$1]] = $3
val[$1,cnt[$1]] = $0
next
}
$1 in cnt {
for (i=1; i<=cnt[$1]; i++) {
if ( (beg[$1,i] <= $2) && ($2 <= end[$1,i]) ) {
print $0, val[$1,i]
}
}
}
$ awk -f tst.awk fileB fileA
chrX 114868305 14 chrX 114868291 114868413 PLS3
chr11 62389325 2 chr11 62389317 62389439 B3GAT3
上面假设您想要制表符分隔的输出,如果您不想要,则将其删除BEGIN { OFS="\t" }
,如果您希望它在视觉上以表格形式显示,则将其通过管道传输到column -t
.