0
目前我正在研究一个脚本,该脚本应该生成一些可以提交给群集的PBS脚本。我的正常脚本运行良好,但现在我面临着为一个程序输入两个文件的问题。我的一个脚本例如看起来像:如何在一个循环中获取两个文件
#!/bin/bash
echo -e "#!/bin/bash\n
#SBATCH --job-name=whatever
#SBATCH --export=NONE
#SBATCH --nodes=1
#SBATCH --cpus-per-task=8
#SBATCH --mem=80G
#SBATCH --partition=blabla
#SBATCH --blabla" >> $1
echo -e "touch log_file_$1\n" >> $1
x=$(cd $(dirname ${BASH_SOURCE[0]}) && pwd)
for file in /foo/bar/foo/bar/*; do
rl=$(readlink -f $file)
kw=${rl##*/}
id=${kw%%.*}
gz_weg=${kw%.*}
if [ ! -d "$id" ]; then
mkdir "$id"
fi
echo "echo $kw >> log_file_$1" >> $1
printf "foo-bar --mode barbar -e 0.001 --index /barz/barz/barz.index --inFile $rl --output $x/$id/$gz_weg.rma 2>> $x/log_file_$1 \n" >> $1
echo "echo -e '"\\n"' >> log_file_$1" >> $1
echo -e "\n" >> $1
done
不是一个美丽我猜,但它适用于我。但现在如上所述,我面临着有两个输入文件的问题。他们都在同一个文件夹中,我试过类似的东西:
for file in /ifs/data/nfs_share/sukmb241/raw_data/samples/iceman_old/iceman.UDG.*/*.fastq.gz; do
bs=$(basename $file)
if [[ "$bs" == *R1* ]]; then
r1=$(readlink -f $file)
k1=${r1##*/}
id1=${k1%%.*}
gz_weg1=${k1%.*}
fi
if [[ "$bs" == *R2* ]]; then
r2=$(readlink -f $file)
k2=${r2##*/}
id2=${k2%%.*}
gz_weg1=${k2%.*}
fi
if [ ! -d "$id1" ]; then
mkdir "$id1"
fi
echo "echo $kw >> log_file_$1" >> $1
printf "blablabla -in1 $r1 -in2 $r2 -f foo -r bar -l 25 -qt -q 20 -o $x/$id1/whatever -verbose 2>> $x/log_file_$1 \n" >> $1
echo "echo -e '"\\n"' >> log_file_$1" >> $1
echo -e "\n" >> $1
done
fi
因为这些文件仅在R1或R2的文件名中有所不同。但是,我意识到这将无法正常工作,因为它只会给我一个文件。因此,如何解决-IN1指向包含R1的文件和-in2包含R2
感谢提前:)
你会很高兴将它包含到我的脚本中,以便它可以工作吗? Atm我没有足够的大脑能力来让它工作。 – JFS31
@ JFS31是否所有'R1'文件都有对应的'R2'文件? – muru
是的,他们有。在每个文件夹中有两个文件,例如:D0770_S23_L001_R1_001.fastq.gz和D0770_S23_L001_R2_001.fastq.gz,我需要处理。 – JFS31