removendo cadeia variável em muitos arquivos

0

Eu tenho muitos arquivos que contêm strings similares como:

>33100_Pseudomonas_etcetera1
texttexttext
>33632_Pseudomonas_etcetera2
texttexttext
>36406_Pseudomonas_etcetera3
texttexttext

e eu preciso de resultados como este:

>Pseudomomas_etcetera1
texttexttext
>Pseudomomas_etcetera2
texttexttext
>Pseudomomas_etcetera3
texttexttext

Tenho certeza de que existe uma solução simples de sed que não consigo descobrir

Notas: Os caracteres são sempre cinco números seguidos por um sublinhado seguido por Pseudomonas_etcetera. Esta string está sempre no início de sua linha e sempre começa com ">". Todos os arquivos têm uma extensão ".sorted".

    
por Manuel 01.08.2018 / 06:12

3 respostas

3

sed faz isso:

sed -E 's/>([0-9]+_)(\w+)/>/' files

se seu padrão for exatamente em questão:

sed -E 's/([0-9]+_)//' files
  • -E usa expressões regulares estendidas
  • ([0-9]+_)(\w+) define duas regiões do padrão do Word que você as acessaria com \ 1 e \ 2 .
por 01.08.2018 / 07:25
1

Usando o padrão sed e assumindo que todos os arquivos estão localizados no diretório atual:

mkdir fixed || exit 1   # exits if the output directory already exists
for filename in *.sorted; do
    sed '/^>[0-9]*_/s//>/' "$filename" >"fixed/$filename"
done

Isso itera todos os nomes de arquivos que correspondem ao padrão *.sorted e, para cada um, executa um script sed curto.

O script sed localizará todos os cabeçalhos do Fasta que começam com um número seguido por um sublinhado. Quando encontrar um, ele substituirá o marcador de cabeçalho, o número e o sublinhado apenas pelo marcador de cabeçalho > .

O resultado será gravado em novos arquivos no subdiretório fixed .

    
por 01.08.2018 / 08:33
1

[OP wrote] Pretty sure there is a simple sed solution which I can't seem to figure out.

Isso está correto.

[OP wrote] Notes: The characters are always five numbers followed by an underscore followed by Pseudomonas_etcetera. This string is always at the beginning of its line and it always starts with ">". All files have a ".sorted" extension.

Sua descrição da declaração pbm é bem exata, no sentido de que ela pode ser traduzida para o código sed . Veja como:

  • Essa string está sempre no começo da linha e sempre começa com ">": regex = > %código%
  • Os caracteres são sempre 5 caracteres numéricos: regex = > %código%
  • Seguido por um sublinhado seguido por "Pseudomonas_etcetera": regex = > %código%
  • A sintaxe básica do comando substituto em /^>/ é: /^>[0-9][0-9][0-9][0-9][0-9]/ , ou seja, qualquer porção do espaço padrão (normalmente a linha atual, também conhecida como registro) é correspondida pela regex (no /^>[0-9][0-9][0-9][0-9][0-9]_Pseudomonas_etcetera/ do O comando sed , deve ser substituído pela string de substituição no comando s/regex/rpl_str/ do comando LHS .
  • Então, seu comando para fazer a substituição é:
  • s///
  • Aviso: não foi testado.
por 01.08.2018 / 13:21