Talvez:
sed 's/-R[^;]*;$/;/'
Ou
awk -F ';' -f OFS=';' '{sub(/-R.*/, "",$(NF-1))}; 1'
Eu tenho um arquivo gff no qual eu preciso remover -R * de todas as linhas que possuem o padrão Parent = gopAga1 _...- R.;
A estrutura do arquivo é mostrada abaixo para um único gene, mas eu preciso de uma correção global para todos os genes no arquivo.
>2446 17292 . + . ID=gopAga1_00004497-RA;Parent=gopAga1_00004497;Name=gopAga1_00004497-RA;Alias=augustus_masked-scaffold4362-processed-gene-0.0-mRNA-1;_AED=0.12;_QI=0|0.8|0.81|1|1|1|11|1368|404;_eAED=0.12;Note=Similar to PLAT: Tissue-type plasminogen activator (Pongo abelii);
>scaffold4362 maker exon 2446 2545 . + . ID=gopAga1_00004497-RA:exon:4045;Parent=gopAga1_00004497-RA;
>scaffold4362 maker exon 6721 6834 . + . ID=gopAga1_00004497-RA:exon:4046;Parent=gopAga1_00004497-RA;
>scaffold4362 maker exon 7241 7415 . + . ID=gopAga1_00004497-RA:exon:4047;Parent=gopAga1_00004497-RA;
>scaffold4362 maker exon 10114 10205 . + . ID=gopAga1_00004497-RA:exon:4048;Parent=gopAga1_00004497-RA;
>scaffold4362 maker exon 10478 10649 . + . ID=gopAga1_00004497-RA:exon:4049;Parent=gopAga1_00004497-RA;
>scaffold4362 maker exon 11037 11122 . + . ID=gopAga1_00004497-RA:exon:4050;Parent=gopAga1_00004497-RA;
>scaffold4362 maker exon 11518 11713 . + . ID=gopAga1_00004497-RA:exon:4051;Parent=gopAga1_00004497-RA;
>scaffold4362 maker exon 12794 12930 . + . ID=gopAga1_00004497-RA:exon:4052;Parent=gopAga1_00004497-RA;
>scaffold4362 maker exon 13006 13146 . + . ID=gopAga1_00004497-RA:exon:4053;Parent=gopAga1_00004497-RA;
>scaffold4362 maker exon 14920 15047 . + . ID=gopAga1_00004497-RA:exon:4054;Parent=gopAga1_00004497-RA;
>scaffold4362 maker exon 16051 17292 . + . ID=gopAga1_00004497-RA:exon:4055;Parent=gopAga1_00004497-RA;
Estou usando sed para encontrar padrões, mas não tenho certeza de como usar o sed para remover tudo entre o último número da linha e o ponto e vírgula.
O meu script atual funciona? A saída esperada está abaixo.
sed / Parent = gopAga1 _ ........ R; $ / Parent = gopAga1 ........; / gop.gff
>2446 17292 . + . ID=gopAga1_00004497-RA;Parent=gopAga1_00004497;Name=gopAga1_00004497-RA;Alias=augustus_masked-scaffold4362-processed-gene-0.0-mRNA-1;_AED=0.12;_QI=0|0.8|0.81|1|1|1|11|1368|404;_eAED=0.12;Note=Similar to PLAT: Tissue-type plasminogen activator (Pongo abelii);
>scaffold4362 maker exon 2446 2545 . + . ID=gopAga1_00004497-RA:exon:4045;Parent=gopAga1_00004497;
>scaffold4362 maker exon 6721 6834 . + . ID=gopAga1_00004497-RA:exon:4046;Parent=gopAga1_00004497;
>scaffold4362 maker exon 7241 7415 . + . ID=gopAga1_00004497-RA:exon:4047;Parent=gopAga1_00004497;
>scaffold4362 maker exon 10114 10205 . + . ID=gopAga1_00004497-RA:exon:4048;Parent=gopAga1_00004497;
>scaffold4362 maker exon 10478 10649 . + . ID=gopAga1_00004497-RA:exon:4049;Parent=gopAga1_00004497;
>scaffold4362 maker exon 11037 11122 . + . ID=gopAga1_00004497-RA:exon:4050;Parent=gopAga1_00004497;
>scaffold4362 maker exon 11518 11713 . + . ID=gopAga1_00004497-RA:exon:4051;Parent=gopAga1_00004497;
>scaffold4362 maker exon 12794 12930 . + . ID=gopAga1_00004497-RA:exon:4052;Parent=gopAga1_00004497;
>scaffold4362 maker exon 13006 13146 . + . ID=gopAga1_00004497-RA:exon:4053;Parent=gopAga1_00004497;
>scaffold4362 maker exon 14920 15047 . + . ID=gopAga1_00004497-RA:exon:4054;Parent=gopAga1_00004497;
>scaffold4362 maker exon 16051 17292 . + . ID=gopAga1_00004497-RA:exon:4055;Parent=gopAga1_00004497;
Talvez:
sed 's/-R[^;]*;$/;/'
Ou
awk -F ';' -f OFS=';' '{sub(/-R.*/, "",$(NF-1))}; 1'
$ sed '/^>.*Parent=samp1_/s/-R.;$/;/' <file.fa
>ID=samp1_00004497:4045;Parent=samp1_00004497;
>ID=samp1_00004497:4046;Parent=samp1_00004498;
>ID=samp1_00004497:4047;Parent=samp1_00004499;
>ID=samp1_00004497:4048;Parent=samp1_00004496;
O comando sed
acima encontrará todas as linhas começando com >
e contendo a string Parent=samp1_
, e para cada linha substituirá a% final-R.;
(onde .
corresponde a um único caractere) com apenas %código%. As linhas que não terminam com nada que corresponda a ;
permanecerão inalteradas.
Altere o ponto em -R.;
para -R.;
se você quiser remover qualquer número de caracteres que não sejam [^;]*
até o ;
no final.
Para sua pergunta atualizada, use ;
no lugar de Parent=gopAga1_
.
A linha de comando
sed -re 's/([^-]+).+?;/;/g'
emitirá tudo até -
para cada linha, não incluindo -
e, em seguida, adicionará um ponto e vírgula ao final.
Atualizar
sed -re 's/(_.{8})-R.//g'
removerá caracteres indesejados com base na presença de _
, em seguida, 8 caracteres e, em seguida, -R
.
Tags sed regular-expression