sed na solução de problemas do script bash

0

Eu tenho o seguinte problema em relação ao comando sed. O que eu quero fazer é:

sed '1 d' filename.fa | sed "1i\>filename\n" > filename_Edited.fa

onde o arquivo da linha é substituído por "> nome do arquivo". Isso é feito em 2 etapas: excluindo a primeira linha e, em seguida, inserindo uma nova que contenha o "> text" desejado. O comando funciona como está escrito acima, se for digitado diretamente no console (sem variáveis). No entanto, eu preciso deste comando integrado no script a seguir, onde filename agora depende de uma variável:

#!/bin/bash

CODE='cut -c 7-21 Data.txt'

cd ../FASTA_SEC/
 for i in ${CODE}
 do
 sed '1 d' ${CODE}.fa | sed "1i\>${CODE}\n" > ${CODE}_Edited.fa
 done

Eu recebo o seguinte erro quando esse script é executado para cada iteração do loop:

try: line 8: ${CODE}_Edited.fa: ambiguous redirect

Eu não entendo o que está errado na sed sintaxis ou no roteiro geral, Aparentemente, deve funcionar, mas não funciona. Alguma pista?

Eu também tentei executar o script sem parte pipped, apenas executando o sed que exclui a primeira linha do texto:

#!/bin/bash

CODE='cut -c 7-21 Data.txt'

cd ../FASTA_SEC/
 for i in ${CODE}
 do
 sed '1 d' ${CODE}.fa > ${CODE}_Edited.fa
 done

No entanto, ele retorna o primeiro erro novamente!

Obrigado pela ajuda do ano !!

**. fa format são conhecidos como fasta, que são uma espécie de formato de texto simples usado em seqüências de DNA

    
por Neuls 29.11.2016 / 16:48

1 resposta

2

Pode ser mais simples não usar sed para o prepend, mas cat :

#!/bin/bash
header=$(mktemp)
scratch=$(mktemp)
trap "rm -f $header $scratch" EXIT

cd ../FASTA_SEC/
for CODE in $(cut -c 7-21 Data.txt); do
    echo ">${CODE}_" > $header
    if [[ -r "${CODE}.fa" ]]; then
        sed '1d' "${CODE}.fa" > $scratch
        cat $header $scratch > ${CODE}_Edited.fa
    fi
done
    
por 29.11.2016 / 16:57