次のファイルの内容を含むフォルダーがあります。
ls bams-lab/*.name-sorted.fixmate.sorted.dedup.sam
bams-lab/OZBenth2_.fastp.fq.gz.name-sorted.fixmate.sorted.dedup.sam
...
bams-lab/OZBenth7_.fastp.fq.gz.name-sorted.fixmate.sorted.dedup.sam
次のbashスクリプトを使用してファイルのリストを作成しようとしています。
#!/bin/bash
# usage: sh merge_sam_pbs.sh /path/to/*.name-sorted.fixmate.sorted.dedup.sam
output=$(dirname $1)
samlist=$(for sam in $1; do echo "I=$sam "; done)
cat << EOF |cat #qsub
#!/bin/bash -l
#PBS -N merge
#PBS -l walltime=150:00:00
#PBS -j oe
#PBS -l mem=70G
#PBS -l ncpus=2
#PBS -M [email protected]
cd \$PBS_O_WORKDIR
conda activate picard
echo $samlist
picard -Xmx10g MergeSamFiles \
$samlist \
O=${output}/merged.sorted.dedup.bam
EOF
ただし、ファイルは1つだけ選択されます。
> sh merge_sam_pbs.sh bams-lab/*.name-sorted.fixmate.sorted.dedup.sam
#!/bin/bash -l
#PBS -N merge
#PBS -l walltime=150:00:00
#PBS -j oe
#PBS -l mem=70G
#PBS -l ncpus=2
#PBS -M [email protected]
cd $PBS_O_WORKDIR
conda activate picard
echo I=bams-lab/OZBenth2_.fastp.fq.gz.name-sorted.fixmate.sorted.dedup.sam
picard -Xmx10g MergeSamFiles I=bams-lab/OZBenth2_.fastp.fq.gz.name-sorted.fixmate.sorted.dedup.sam O=bams-lab/merged.sorted.dedup.bam
私が逃したものは何ですか?
ベストアンサー1
なぜなら、1つのファイルだけを選択するからです。$1
ただファイル。
*
スクリプトを呼び出すと解釈されるので、呼び出し
sh merge_sam_pbs.sh bams-lab/*.name-sorted.fixmate.sorted.dedup.sam
次のように発行
sh merge_sam_pbs.sh "bams-lab/1.name-sorted.fixmate.sorted.dedup.sam" "bams-lab/2.name-sorted.fixmate.sorted.dedup.sam" "bams-lab/3.name-sorted.fixmate.sorted.dedup.sam"
その時$1
です"bams-lab/1.name-sorted.fixmate.sorted.dedup.sam"
。
"$@"
ループで使用したいですfor
。
samlist=$(for sam in "$@"; do echo "I=$sam "; done)
または、forループを次に置き換える方が良いですprintf
。
samlist=$(printf 'I=%s\n' "$@")
または、ユースケースに適した改行の代わりに引用符とスペースを追加します。
samlist=$(printf 'I="%s" ' "$@")