Coletando dados específicos do genoma de um arquivo e coletando-os no mesmo título

0

Eu tenho dados de genomas em um arquivo, genomes-seq.txt . Os títulos das seqüências começam com > e, em seguida, o nome do genoma:

>genome.1
atcg
atcg
atcggtc

>genome.2
atct
tgcgtgctt
attttt

>genome.
sdkf
sdf;ksdf
sdlfkjdslc
edsfsfv

>genome.3
as;ldkhaskjd
asdkljdsl
asdkljasdk;l

>genome.4
ekjfhdhsa
dsfkjskajd
asdknasd


>genome.1
iruuwi
sdkljbh
sdfljnsdl

>genome.234
efijhusidh
siduhygfhuji

>genome.1
ljhdcj
sdljhsdil
fweusfhygc

Eu quero coletar os dados semelhantes para o genome.1 em um arquivo para que fique assim:

>genome.1
atcg
atcggtc

iruuwi
sdkljbh
sdfljnsdl
ljhdcj
sdljhsdil
fweusfhygc

Mas toda vez que eu faço isso usando sed eu recebo:

>genome.1
atcg
atcg
atcggtc

>genome.1
iruuwi
sdkljbh
sdfljnsdl

>genome.1
ljhdcj
sdljhsdil
fweusfhygc

Ou seja, vários genome.1 s. Como posso fazê-lo corretamente, então em um grande conjunto de dados eu não preciso remover todas as repetições?

    
por paul 09.10.2018 / 16:54

4 respostas

3

$sed -nr /\>genome.1/,/^$/p file | sed '2,${/^>genome.1$/d}'

>genome.1
atcg
atcggtc

iruuwi
sdkljbh
sdfljnsdl
ljhdcj
sdljhsdil
fweusfhygc

genome.1 é a palavra-chave, mude de acordo com a lista que você gostaria de gerar.

    
por 09.10.2018 / 17:04
0

com perl

perl -00 -ne 'if (/^>genome\.1\n/) {s/// if $. > 1; print}' file
    
por 09.10.2018 / 17:35
0

Com Awk:

{
  if (/^>/)
    in_section = 0;
  if ($0 == ">genome.1") {
    in_section = 1;
    if (!section_count++)
      print;
  } else if (in_section)
    print;
}

Uso:

awk '{ if (/^>/) in_section = 0; if ($0 == ">genome.1") { in_section = 1; if (!section_count++) print; } else if (in_section) print; }' genome.txt
    
por 09.10.2018 / 20:39
0

Bem, se começar com o awk, tente isto:

echo ">genome.1";awk 'BEGIN{RS=">"}{if($1 == "genome.1"){for(i=1;i<NF;i++){print $(i+1)}}}' file |sort -u

Com RS=">" separando cada registro "genoma" em execução, em cada registro imprime todos os campos, mas primeiro, então sort a lista de saída é única (parametr -u ). Se você definir o RS=">genome\." , você pode escrever curto:

echo -n ">genome.";awk 'BEGIN{RS=">genome."}/1/{print $0}' file |sort -ur
    
por 10.10.2018 / 09:32

Tags