Bashでファイルリストを作成できませんでした。

Bashでファイルリストを作成できませんでした。

次のファイルの内容を含むフォルダーがあります。

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" ' "$@")

おすすめ記事