如何在 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
不过,由于每对都有两个文件,因此每对将运行两次。我认为这可能不是您所需要的。
要每对运行一次,您可以执行以下操作:
#!/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