copie e cole texto do final da linha

0

Um longo curto, mas existe uma maneira de copiar o final de linhas selecionadas e acrescentar o texto a essa linha. O que eu quero alcançar é isso.

o que tenho

>13_gnd
atcg
>14_galF
atgc

o que eu quero

>13_gnd_gnd
atcg
>14_galF_galF
atgc    

Assim, todas as linhas que começam com > copiam a última palavra e são anexadas ao final da linha. Obrigado.

    
por AudileF 22.06.2017 / 12:51

2 respostas

4
$ sed 's/_[^_]*$/&&/' file         
>13_gnd_gnd
atcg
>14_galF_galF
atgc

A substituição sed corresponderá ao último sublinhado em cada linha e depois do final da linha. Isso é o que o padrão _[^_]*$ faz ("corresponde a um sublinhado possivelmente seguido por outros caracteres não sublinhados e o fim da linha"). Ele irá substituir isso (incluindo o sublinhado) com o que foi correspondido, duas vezes (é isso que o && faz no bit de substituição).

Como este parece ser um arquivo no formato Fasta , e como as seqüências genômicas não podem conter sublinhados, não há teste é necessário para > no início da linha.

    
por 22.06.2017 / 12:56
1

Solução awk curta:

awk -F'_' '$0~/^>/{ $0=$0 FS $NF }1' file

A saída:

>13_gnd_gnd
atcg
>14_galF_galF
atgc

Detalhes:

  • -F'_' - separador de campos

  • $0~/^>/ - executa uma ação se a linha começar com >

  • $0=$0 FS $NF - acrescenta o último valor do campo ao final

por 22.06.2017 / 12:55