Expansão do Parâmetro da Shell

0

Eu fiz a seguinte expansão de shell de parâmetro:

trihead="$(cat ../FASTA_SEC/"$i".fa)"
echo "${trihead#"${trihead%%[!A]*}"}" > ../FASTA_SEC/"$i".fa

Gostaria de cortar os A's da frente da segunda linha de um arquivo fasta (uma espécie de formato de texto simples .fa)

a entrada seria algo como:

>B4-0K032_18670_015
AAAAAAANNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNGNNNTAGATACAAGCGAGCGGC

e gostaria que a saída fosse assim:

>B4-0K032_18670_015
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNGNNNTAGATACAAGCGAGCGGC

A propósito, alguém sabe de algum lado onde a expansão dos parâmetros do shell é bem explicada?

    
por Neuls 13.01.2017 / 18:11

2 respostas

2

Para aparar a% consecutiva A s da linha segundo de um arquivo (e depois substituir o arquivo original pelo resultado):

$ sed '2s/^A*//' data.fa >data.out  &&  mv data.out data.fa

O comando sed aplica o comando de substituição ( s ) à linha 2 especificamente neste exemplo. Ele substituirá qualquer número de A s no início da linha com nada.

O padrão é ^A* , o que significa "coincidir com zero ou mais ( * ) do caractere único A no início da linha ( ^ )".

O motivo pelo qual eu não uso sed -i (para "edição no local") é que o -i flag é horrivelmente não-portátil entre sed implementations.

    
por 13.01.2017 / 18:41
0

Isso removerá todos os principais A s de uma linha após uma linha que comece com > :

sed '/^>/n;s/^A*//' /path/to/file

Se a saída é o que você quer, e você quer editar o arquivo original, use:

sed --in-place '/^>/n;s/^A*//' /path/to/file
    
por 13.01.2017 / 18:42