adiciona o número da linha após o padrão correspondente no vim

-1

Eu tenho seqüências brutas e tenho que convertê-lo para o formato fasta. então as leituras são assim:

CTACGGTGTGCTCTTCCGATCTGACTATG
AGTTGGTGTGCTCTCCCGATCTCGCTCCCTC
GTGAGGTGTGCTCTTCCGATCTCCGGCAGTGTGCT

e eu quero adicionar > e números acima de cada linha, então, finalmente, deve ser parecido com:

>1
CTACGGTGTGCTCTTCCGATCTGACTATG
>2
AGTTGGTGTGCTCTCCCGATCTCGCTCCCTC
>3
GTGAGGTGTGCTCTTCCGATCTCCGGCAGTGTGCT

como posso fazer no vim? se não for vim, posso usar o comando sed?

    
por user3027866 13.06.2014 / 23:57

2 respostas

4

No vim eu adicionaria a primeira linha ( >1 ), depois criaria uma macro simples que puxa a linha numerada, desce uma linha, cola o yank e incrementa o número. Nos comandos do modo normal vim: y y j p Ctrl-a . Se você salvou a macro para registrar q , execute-a com @ q .

Supondo que o primeiro registro esteja na primeira linha, você pode fazer isso com duas invocações do GNU sed assim:

sed '=' file | sed 's/^[0-9]/>&/'

Ou com nl , que contém apenas números que contêm dados:

nl file | sed 's/^ *\([0-9]\+\)\t*/>\n/'

Isso pode ser feito de forma mais intuitiva com awk :

awk 'NF { print ">" ++i "\n" $0 }' file

Saída em todos os casos:

>1
CTACGGTGTGCTCTTCCGATCTGACTATG
>2
AGTTGGTGTGCTCTCCCGATCTCGCTCCCTC
>3
GTGAGGTGTGCTCTTCCGATCTCCGGCAGTGTGCT
    
por 14.06.2014 / 00:34
2

Para inserir um número de linha mais um marcador que será usado no próximo comando, você pode usar algo assim:

:%s/^/\=printf('>%-d ', line('.'))

Para inserir uma nova linha, substitua algo por "\ r". Algo muito simples como este deve fazer o trabalho neste caso

:'<,'>s/ /\r

Existem muito mais dicas sobre o vim em http://vim.wikia.com/wiki/Vim_Tips_Wiki

    
por 14.06.2014 / 02:18

Tags