두 개의 입력 파일이 있습니다
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의 2번째 열과 3번째 열 사이의 파일 B 번호 범위에 포함되는지 확인합니다. 포함된 경우 파일 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
.