フォルダ内の複数のファイルを一度に処理するためにMac端末でコマンドを実行するには?

フォルダ内の複数のファイルを一度に処理するためにMac端末でコマンドを実行するには?

Mac端末のフォルダにある複数のファイルに対して同じコマンドを実行するには?これらのファイルの名前は24538_7#1_paired1.fq、、、、、など24538_7#1_paired2.fqに似ています。24538_7#2_paired1.fq24538_7#2_paired2.fq24538_7#3_paired1.fq24538_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

おすすめ記事