ファイルディレクトリを介して実行したいスクリプトがあります。
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