Com base em: Extraia nomes de File_B com intervalos sobrepostos com File_A
Eu quero extrair nomes de genes (geralmente coluna 10, o que vem depois de "Name=") combinando a primeira coluna de file_b com file_a e extraindo os nomes de genes se a segunda coluna de file_b estiver dentro do intervalo de genes, delineado pelas colunas 4 e 5 do arquivo_b. As primeiras colunas devem corresponder, de modo que eu obtenha apenas um gene por linha (file_b), mas, em teoria, poderia ter várias linhas adjacentes (column_b) correspondendo ao mesmo gene (por exemplo, se a segunda linha em file_b fosse MT 4065
)
Existem alguns problemas com o código que tenho agora.
(1) do jeito que está configurado abaixo, a última linha de file_b é perdida da saída, embora isso mude se esta linha ( groupVII 17978350
) for trazida para a lista. Gostaria que funcionasse do jeito que está configurado.
(2)Os nomes são truncados se tiverem caracteres especiais (por exemplo, dois pontos e hífens). Eu gostaria de ter o nome inteiro após o sinal de igual.
(3) Eu gostaria de corresponder a entrada/linha de file_b aos acertos do gene na saída, de modo que as duas primeiras colunas sejam a entrada e a terceira coluna seja o acerto do gene.
arquivo_a.tsv
MT insdc gene 2851 3825 . + . ID=gene:ENSGACG00000020925 Name=mt-nd1 biotype=protein_coding description=NADH dehydrogenase 1%2C mitochondrial [Source:ZFIN%3BAcc:ZDB-GENE-011205-7] gene_id=ENSGACG00000020925 logic_name=mt_genbank_import version=1
MT insdc gene 4036 5082 . + . ID=gene:ENSGACG00000020929 Name=mt-nd2 biotype=protein_coding description=NADH dehydrogenase 2%2C mitochondrial [Source:ZFIN%3BAcc:ZDB-GENE-011205-8] gene_id=ENSGACG00000020929 logic_name=mt_genbank_import version=1
groupIII ensembl gene 7332324 7334769 . - . ID=gene:ENSGACG00000015265 Name=si:dkeyp-68b7.10 biotype=protein_coding description=si:dkeyp-68b7.10 [Source:ZFIN%3BAcc:ZDB-GENE-070912-667] gene_id=ENSGACG00000015265 logic_name=ensembl version=1
groupIV ensembl gene 1368026 1374881 . + . ID=gene:ENSGACG00000016447 Name=hnrnpa0b biotype=protein_coding description=heterogeneous nuclear ribonucleoprotein A0b [Source:ZFIN%3BAcc:ZDB-GENE-030131-6154] gene_id=ENSGACG00000016447 logic_name=ensembl version=1
groupIV ensembl gene 5347339 5349041 . - . ID=gene:ENSGACG00000017010 Name=zgc:153018 biotype=protein_coding description=zgc:153018 [Source:ZFIN%3BAcc:ZDB-GENE-060929-752] gene_id=ENSGACG00000017010 logic_name=ensembl version=1
groupV ensembl gene 120615 125489 . + . ID=gene:ENSGACG00000002103 Name=zdhhc6 biotype=protein_coding description=zinc finger%2C DHHC-type containing 6 [Source:ZFIN%3BAcc:ZDB-GENE-030131-3189] gene_id=ENSGACG00000002103 logic_name=ensembl version=1
groupVI ensembl gene 11230354 11232784 . + . ID=gene:ENSGACG00000009527 Name=bnip4 biotype=protein_coding description=BCL2 interacting protein 4 [Source:ZFIN%3BAcc:ZDB-GENE-051113-212] gene_id=ENSGACG00000009527 logic_name=ensembl version=1
groupVII ensembl gene 2271611 2277214 . + . ID=gene:ENSGACG00000019012 Name=sf3b2 biotype=protein_coding description=splicing factor 3b%2C subunit 2 [Source:ZFIN%3BAcc:ZDB-GENE-070928-1] gene_id=ENSGACG00000019012 logic_name=ensembl version=2
groupVII ensembl gene 15815857 15824549 . + . ID=gene:ENSGACG00000020296 Name=mpp1 biotype=protein_coding description=membrane protein%2C palmitoylated 1 [Source:ZFIN%3BAcc:ZDB-GENE-031113-4] gene_id=ENSGACG00000020296 logic_name=ensembl version=1
groupVII ensembl gene 17978322 17982388 . + . ID=gene:ENSGACG00000020399 Name=si:ch211-284e13.4 biotype=protein_coding description=si:ch211-284e13.4 [Source:ZFIN%3BAcc:ZDB-GENE-060526-161] gene_id=ENSGACG00000020399 logic_name=ensembl version=1
arquivo_b.tsv
MT 4050
groupIII 7332350
groupIV 5347350
groupVI 11230375
groupVII 17978350
código:
while read -r id pos; do awk -v id="$id" -v pos="$pos" '$1 == id && pos > $4 && pos < $5 { if (gensub(/.*Name=([A-Za-z0-9]*).*/, "\\1", 1) !~ /\s/) print gensub(/.*Name=([A-Za-z0-9]*).*/, "\\1", 1); }' <file_a.tsv; done < file_b.tsv > output.tsv
output.tsv
mt
si
zgc
bnip4
Desired_output
MT 4050 mt-nd2
groupIII 7332350 si:dkeyp-68b7.10
groupIV 5347350 zgc:153018
groupVI 11230375 bnip4
groupVII 17978350 si:ch211-284e13.4
Sua saída mostrada esperada não me parece consistente (2 linhas -> 1ª e 3ª), se isso for um erro de digitação, você poderia tentar seguir.
Então corra
Certifique -se de que os campos em seus
.tsv
arquivos estejam separados por guias antes de processá-los. Minha saída:Para o ID
MT
, o acerto do genemt-nd2
não deve sermt-nd1
.Eu ainda recomendo usar Python para processamento de dados.