파일 디렉터리를 통해 실행하려는 스크립트가 있습니다.
awk '{if(NR%4==1) {printf(">%s\n",substr($0,2));} else if(NR%4==2) print;}' < TNGA_C_0hr_Joined_Asz1.fastqsanger | awk 'NR%2==0' | sed 's/TGAGATGTGA/*/p' | cut -d '*' -f 2 -s | sort -k 1.180,1.194 -u | cat -n | sed 's/^/>/' | tr "[\t]" "\n" > TNGA_C_0hr_Asz1_Collapsed.fasta
이 스크립트를 테스트해 본 결과 내 요구 사항에 잘 작동했습니다.
내가 하고 싶은 것은 디렉터리의 모든 파일에 적용되는 for 루프를 만드는 것입니다. 나는 성공하지 않고 다음을 시도했습니다. 또한 변형을 시도했습니다.
for filename in /Test/*.fastqsanger; do
awk '{if(NR%4==1) {printf(">%s\n",substr($0,2));} else if(NR%4==2) print;}' < filename.fastqsanger | awk 'NR%2==0' | sed 's/TGAGATGTGA/*/p' | cut -d '*' -f 2 -s | sort -k 1.180,1.194 -u | cat -n | sed 's/^/>/' | tr "[\t]" "\n" > filename.fasta
done
나는 프로그래밍에 상당히 익숙하지 않으므로 도움을 주시면 대단히 감사하겠습니다.
답변1
filename
귀하의 스크립트는 루프에 변수를 사용하지 않습니다 . filename.fastqsanger
변수를 인용하지 않는다는 것은 전체 파일 이름이 이미 존재하지만 아직 존재하지 않는다는 것을 의미합니다.
수정된 버전은 다음과 같습니다.
for filename in /Test/*.fastqsanger; do
awk '{if(NR%4==1) {printf(">%s\n",substr($0,2));} else if(NR%4==2) print;}' < $filename | awk 'NR%2==0' | sed 's/TGAGATGTGA/*/p' | cut -d '*' -f 2 -s | sort -k 1.180,1.194 -u | cat -n | sed 's/^/>/' | tr "[\t]" "\n" > $filename.fasta
done
답변2
filename
다음 줄에서는 변수를 사용하지 않습니다 .
for filename in /Test/*.fastqsanger; do
awk '{if(NR%4==1) {printf(">%s\n",substr($0,2));} else if(NR%4==2) print;}' < filename.fastqsanger | awk 'NR%2==0' | sed 's/TGAGATGTGA/*/p' | cut -d '*' -f 2 -s | sort -k 1.180,1.194 -u | cat -n | sed 's/^/>/' | tr "[\t]" "\n" > filename.fasta
done
노력하다:
for filename in /Test/*.fastqsanger
do
fname=`basename $filename .fastqsanger`
awk '{if(NR%4==1) {printf(">%s\n",substr($0,2));} else if(NR%4==2) print;}' < $filename | awk 'NR%2==0' | sed 's/TGAGATGTGA/*/p' | cut -d '*' -f 2 -s | sort -k 1.180,1.194 -u | cat -n | sed 's/^/>/' | tr "[\t]" "\n" > $fname.fasta
done
$fname
그러면 다음과 같이 파일의 기본 이름이 저장됩니다 .
/Test/abcd.fastqsanger
/Test/abcd.fasta
~보다 되다/Test/abcd.fastqsanger.fasta