Bash 스크립트에서 sed 문제 해결

Bash 스크립트에서 sed 문제 해결

sed 명령과 관련하여 다음과 같은 문제가 있습니다. 내가 하고 싶은 일은:

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

파일의 첫 번째 줄은 ">파일 이름"으로 대체됩니다. 이 작업은 두 단계로 수행됩니다. 첫 번째 줄을 삭제한 다음 원하는 ">텍스트"가 포함된 새 줄을 삽입합니다. 변수 없이 콘솔에 직접 명령을 입력하면 명령은 위에서 작성한 것과 동일하게 작동합니다. 그러나 이 명령을 다음 스크립트에 통합해야 합니다. 여기서 파일 이름은 이제 변수에 따라 달라집니다.

#!/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

for 루프 반복마다 이 스크립트를 실행할 때 다음 오류가 발생합니다.

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

sed sintaxis 또는 전체 스크립트에 어떤 문제가 있는지 이해하지 못합니다. 분명히 작동해야 하지만 작동하지 않습니다. 어떤 단서가 있나요?

또한 파이프 부분 없이 스크립트를 실행하고 sed를 수행하여 텍스트에서 첫 번째 줄을 제거해 보았습니다.

#!/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

그러나 이전 오류가 다시 반환됩니다!

도와주셔서 감사합니다!

**.fa 형식은 fasta라고 하며 DNA 서열에 대한 일반 텍스트 형식입니다.

답변1

sed접두사를 사용하지 않는 것이 더 간단할 수도 있지만 대신 다음을 수행합니다 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

관련 정보