$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.
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?
$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.
com perl
perl -00 -ne 'if (/^>genome\.1\n/) {s/// if $. > 1; print}' file
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
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
Tags bash