Sed para copiar parte do nome do arquivo em outro conteúdo do arquivo com a mesma substring

4

Para cada arquivo com a extensão especificada em um diretório, eu gostaria de usar apenas uma substring do nome do arquivo para adicionar a outro arquivo e gerar como um arquivo com uma extensão diferente, mas com a mesma substring.

Encontrei alguns exemplos semelhantes ao que gostaria de fazer, mas estou escrevendo um script bash, por isso enfrentei alguns desafios que tive dificuldade em encontrar exemplos.

Por exemplo, eu começaria com filename.sample e quero apenas a substring "filename".

O que tentei fazer é:

for i in /path/to/*.sample
do
   bar="${i%%.sample*}"
   sed "s/^>\(.*\)/>;label=${bar##*/};/" "$i" > "$i"_bar  \;
done

O conteúdo dos arquivos *.sample é o seguinte:

*.sample

> MEWFJWRNFF_141
AB28974UJBDASX

A saída desejada é:

Output_bar
> MEWFJWRNFF_141; label=filename;
AB28974UJBDASX

Deixe-me saber se não estou claro de alguma forma! Obrigada!

    
por Alina Orozco 21.08.2016 / 09:13

1 resposta

4
for i in /path/to/*.sample
do
    str="; label=$(basename -s.sample $i);"
    sed "/^>/ s/$/$str/" "$i"
done
  • O comando basename fornece apenas o nome do arquivo, removendo o caminho. E -s.sample irá remover a extensão
  • Então, se i for /path/to/filename.sample , str conterá ; label=filename;
  • /^>/ s/$/$str/ encontrará uma linha começando com > e adicionará o conteúdo da variável str ao final dessa linha

Eu não entendo como você deseja que o arquivo de saída seja nomeado. Se i for /path/to/filename.sample , "$i"_bar fornecerá /path/to/filename.sample_bar

    
por 21.08.2016 / 10:19