「forループ」を使用して、ディレクトリ内のすべてのファイルに対してスクリプトを実行します。

「forループ」を使用して、ディレクトリ内のすべてのファイルに対してスクリプトを実行します。

ファイルディレクトリを介して実行したいスクリプトがあります。

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

関連情報