Você estava próximo, apenas use ++i
fora da substring entre aspas "> ++i"
to "> " ++i
.
awk '/^>/{sub(">", "> "++i " ")}1' infile
Eu sou novo em scripts de shell e estou tentando numerar sequencialmente os cabeçalhos em um arquivo fasta. As seqüências no meu arquivo fasta são assim:
>Rodentia sp.
MALWILLPLLALLILWGPDPAQAFVNQHLCGSHLVEALYILVCGERGFFYTPMSRREVED
PQVGQVELGAGPGAGSEQTLALEVARQARIVQQCTSGICSLYQENYCN
>Ovis aries
MALWTRLVPLLALLALWAPAPAHAFVNQHLCGSHLVEALYLVCGERGFFYTPKARREVEG
PQVGALELAGGPGAGGLEGPPQKRGIVEQCCAGVCSLYQLENYCN
Eu quero usar awk no meu script de shell para que os cabeçalhos sejam numerados sequencialmente, inserindo um número começando de 1 a n (onde n é o número de sequências) após o ">", para que as sequências pareçam assim:
> 1 Rodentia sp.
MALWILLPLLALLILWGPDPAQAFVNQHLCGSHLVEALYILVCGERGFFYTPMSRREVED
PQVGQVELGAGPGAGSEQTLALEVARQARIVQQCTSGICSLYQENYCN
> 2 Ovis aries
MALWTRLVPLLALLALWAPAPAHAFVNQHLCGSHLVEALYLVCGERGFFYTPKARREVEG
PQVGALELAGGPGAGGLEGPPQKRGIVEQCCAGVCSLYQLENYCN
Eu tentei usar a subfunção no awk, para fazer isso, substituindo todas as instâncias de ">" com "> [um número]".
awk '/>/{sub(">", "> ++i ")}1' file
No entanto, não entendo como incrementar variáveis usando a subfunção no awk. Eu gostaria de saber se existe uma maneira de fazer isso usando a subfunção. Eu entendo como sub obras, mas eu não sei como declarar a variável a ser incrementada corretamente.
Eu declarei que eu seja 1 no começo do meu script de shell:
i=1
No entanto, a saída que recebo da subfunção é:
> ++$i Rodentia sp.
> ++$i Ovis aries
Como pode declarar uma variável corretamente para que eu possa usar a subfunção awk para numerar os cabeçalhos?
Como o αғsнιη apontou , você está inserindo ++i
como parte de uma string literal.
Uma solução alternativa, que pode parecer um pouco mais bonita:
awk -F '>' '/^>/ { $1 = "> " ++i } { print }' file.fa
ou, se você gosta da abreviação de { print }
,
awk -F '>' '/^>/ { $1 = "> " ++i } 1' file.fa
Isso usa >
como o delimitador de campo de entrada e substitui o primeiro campo (o bit antes do >
, que está vazio na entrada) em qualquer linha de cabeçalho com a string necessária.
Tags awk scripting bioinformatics