Mac端末のフォルダにある複数のファイルに対して同じコマンドを実行するには?これらのファイルの名前は24538_7#1_paired1.fq
、、、、、など24538_7#1_paired2.fq
に似ています。24538_7#2_paired1.fq
24538_7#2_paired2.fq
24538_7#3_paired1.fq
24538_7#3_paired2.fq
コマンドは次のとおりです。
STAR --runThreadN 12 --genomeDir indices/STAR --twopassMode Basic --readFilesIn data/24538_7#1_paired1.fq data/24538_7#1_paired2.fq --outFileNamePrefix results/STAR/
ファイル名にはカウンターが含まれているため、当然ファイル名を変更する必要があります。
コマンドを作成しようとすると分割エラーが発生します。このコマンドに対する私の努力は次のとおりです。
for file in 24538_7#*.fq; do STAR --runThreadN 12 --genomeDir indices/STAR --twopassMode Basic --readFilesIn data/"${file%.fq}_paired1.fq" data/"${file%.fq}_paired2.fq" --outFileNamePrefix results/STAR/ ; done
(PS - 私はMacOSを使用しています)
答え1
すべてのファイルを繰り返しpaired1.fq
、各ファイルの名前を使用してpaired2.fq
そのファイルの名前を計算します。次に、次のようにプログラムを呼び出します。
for paired1 in data/*paired1.fq; do
paired2="${paired1%1.fq}2.fq" # remove 1.fq from end of name and replace with 2.fq
if [ ! -f "$paired2" ]; then
printf 'Missing file:\t%s\n' "$paired2" >&2
continue
fi
prefix="${paired1%_*}" # remove last underscore and everything after
prefix="${prefix##*/}" # remove directory name from prefix
# If $paired1 is the string "data/24538_7#1_paired1.fq", then
# $prefix should now be "24538_7#1"
mkdir -p "results/STAR/$prefix"
STAR --runThreadN 12 --genomeDir indices/STAR --twopassMode Basic \
--readFilesIn "$paired1" "$paired2" \
--outFileNamePrefix "results/STAR/$prefix/"
done
答え2
パラメータ拡張が十分にクリーンアップされていません。
設定中file
:
file=24538_7#1_paired1.fq
その後、トリミング.fq
:
$ echo ${file%.fq}
24538_7#1_paired1
次に、以下を追加します_paired1.fq
。
$ echo "${file%.fq}_paired1.fq"
24538_7#1_paired1_paired1.fq
この試み:
for file in 24538_7#*.fq; do
STAR --runThreadN 12 --genomeDir indices/STAR --twopassMode Basic --readFilesIn data/"${file%_paired?.fq}_paired1.fq" data/"${file%_paired?.fq}_paired2.fq" --outFileNamePrefix results/STAR/
done
ただし、各ペアには2つのファイルがあるため、各ペアは2回実行されます。私はこれがあなたに必要なものではないかもしれないと思います。
各ペアを一度実行するには、次のようにします。
#!/bin/bash
files=( 24538_7#*.fq )
files=( printf '%s\n' "${files[@]#24538_7#}" | sort -n | awk -F_ '{print $1}' | uniq )
for n in "${files[@]}"; do
STAR --runThreadN 12 --genomeDir indices/STAR --twopassMode Basic --readFilesIn data/"24538_7#${n}_paired1.fq" data/"24538_7#${n}_paired2.fq" --outFileNamePrefix results/STAR/
done