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