0

相対的なUNIX初心者。いくつかのディレクトリ ( Sample*/) があり、samtools を使用してすべての raw.sort.bam ファイルをマージしたいと考えています。各ディレクトリ内でこれを行う作業コードがありますが、親ディレクトリからコードを実行して、すべてのディレクトリを一度に処理したいと考えています。私の問題は、フル パスで samtools を呼び出さなければならないことであり、このパスが UNIX ループ内でどのように機能するかを理解するのに苦労しています。

まず、各ディレクトリ内からマージおよび変換するための作業コードを次に示します。

/home/user/pathtosamtools/sam merge -o all.sort.bam *raw.sort.bam

さて、親ディレクトリから実行すると、すべてのディレクトリに対してこれを実行しようとする私の非動作コード:

for f in `ls Sample*/`; do /home/user/pathtosamtools/sam merge -o $f all.sort.bam Sample*/*raw.sort.bam; done

エラー:

[bam_merge_core_ext] fail to open file all.sort.bam
[bam_header_read] bgzf_check_EOF: Invalid argument
[bam_header_read] invalid BAM binary header (this is not a BAM file).
Segmentation fault

前もって感謝します。

4

1 に答える 1

0

解析しないls

for dir in Sample*/; do 
    /home/user/pathtosamtools/sam merge -o "$dir/all.sort.bam" "$dir"/*raw.sort.bam
done

for ループで glob パターンを指定します。

安全のために、常に変数を引用してください

于 2016-03-31T18:19:46.847 に答える