Use outro arquivo para extrair parte de uma linha que corresponda ao grep, assim como a linha a seguir, e salve em um novo arquivo

2

Eu tenho um arquivo que tem um identificador de seqüência de DNA em uma linha e a seqüência de DNA na próxima linha logo abaixo dela. A sequência de DNA é longa, mas está em uma linha.

File1.fasta:

>AB244308.1.1447 233_28379 1..292

-----------------------------------------------------------------------------------------------------------------------------------------------------GTGCCAG-C-C-G-C-CGC-GGTAATAC-GG-AGGAT-GCG-A-GCG-TTATC-CGG-ATTCATT-GG-GT-TTA--AAGGGTGCGCAGG-C-G-G-GCGT-A-T------------------------------------AA----G-T-C-A-----------------------------------------------------G-G-G--G--TG--A-AA-TG--C-C-AC-G-G---------------------------------------------------------------------------------------------------------------------------------------CT-C-AA----------------------------------------------------------------------------------------------------------------------------------------------------------------C-C-G-T-G-G-A--A-C----T-G--C-C---T--T----------------------------T--GA-T-A---C----------------------------------------------------T--G-T--AT--G-T-C----------------------------------------------------------------------------------------------------------------------------------T-T-G-A-G-T--T-----T-AG------TT-G-A---------------------A-G-T-G---GG-C---------------------------------------------------------------------------------------------------------------------------------------GG--A--ATG------------------------------------------------------------------------------------------------------------------------------------T-A-G-C-AT--GT-A-G-CG-GT--G--------------A--A-A---------------------------------------------------------------------------------------------------TG-C-AT-AG--AG-A-TG-------------------------------C-T------A-C------A-G-A-AC-A-CC------------------------------------------------GA--T--A--GC-GAA-G--G-C----A--------G--C-T-C-A---CTA---------A--GT-T-A-----------------------------------------------------------------------------------------------------------------------------------------A-G--------A-C-T--GA--CG-----C---------------------------------------------TC--A-TG--C-A-CG-A--AA-G-C----G-TG--GG-G-AT-C-A-AA-CA--GG-AT--------TA-G-ATA--------CC-C-C-C-GTA--GT-C-C-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Existem cerca de 112.000 sequências neste arquivo que seguem esse formato. Eu tenho cerca de 20 identificadores de seqüência que eu gostaria de extrair do arquivo fasta e salvar em outro arquivo.

Os identificadores de sequência estão em um arquivo txt como este:

Arquivo2.txt:

AB244308.1.1447
New.ReferenceOTU151 
New.CleanUp.ReferenceOTU19 
New.ReferenceOTU59
New.CleanUp.ReferenceOTU6

Além de puxar linhas com os identificadores de sequência, eu gostaria de puxar a seguinte linha com a sequência de DNA e imprimir tudo isso em um novo arquivo de texto.

Eu encontrei através desta resposta ( Como extrair linhas de um arquivo de texto que contém strings de uma lista em outro arquivo? ) que eu precisaria usar grep e sed. Eu também encontrei outra resposta ( link ) relevante para obter a linha após o jogo grep.

Infelizmente, não sei ao certo como combinar essas respostas para conseguir o que quero.

    
por Clairessa Brown 20.03.2017 / 07:22

3 respostas

2

Como dizem, há mais de uma maneira de esfolar um gato:

grep -F -f File2.txt -A 1 File1.fasta > File3.log

< File2.txt sed -e 's|[.]|\&|g; s|.*|g/^>&/.,.+1W File3.log|' | ed -s - File1.fasta

Aqui estamos tornando os identificadores de seqüência adequados para gerar um script de lote ed dinamicamente. Que é então passado para ed , que o usa para obter o seu arquivo fasta e armazena os resultados em File3.log

    
por 20.03.2017 / 10:31
1

Se suas seqüências estão sempre em uma única linha (que não é o formato fasta padrão, a propósito, fasta normalmente tem 60 caracteres por linha), isso é trivial. Basta usar grep com -A 1 para imprimir a linha correspondente e a próxima e -f para alimentá-la com uma lista de padrões para pesquisar:

grep -A1 -f File2.txt File1.fasta 

No entanto, isso falhará se você tiver uma sequência chamada >foobar e outra com o nome >foo e pesquisar foo . Ele irá imprimir ambos nesse caso. Para soluções mais sofisticadas, veja minha resposta aqui . Deixe-me saber se você deseja o script retrievesqs.pl, não está mais disponível no link. Preciso atualizar essa resposta.

    
por 20.03.2017 / 18:20
0

Existe um arquivo txt para cada um dos 20 identificadores? Então assumindo que eles são chamados de sequence1.txt e assim por diante (por favor, adapte), faça

for file in sequence*.txt; do
  id='grep AB $file'
  grep $id -A1 $file1.fasta |grep -v $id
done

A segunda linha supõe que o id sempre contém AB . Se não, talvez seja sempre a primeira linha e use head -1 $file .

A terceira linha extrai a linha de id e a linha seguinte. O segundo grep remove a linha id. Você pode removê-lo, se quiser uma saída da linha de ID junto com a sequência, para saber qual sequência é para esse ID.

Com grep option -m1 adicional, você pode acelerar um pouco a pesquisa, porque você sabe que há apenas uma correspondência no arquivo.

    
por 20.03.2017 / 10:05

Tags