【问题标题】:dealing with paths in unix loops处理 unix 循环中的路径
【发布时间】:2016-03-30 22:12:55
【问题描述】:

相对 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

提前致谢。

【问题讨论】:

    标签: loops unix path samtools


    【解决方案1】:

    Don't parse ls

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

    您在 for 循环中提供 glob 模式。

    为了安全起见,always quote your variables

    【讨论】:

    • 那行得通,万分感谢!还要感谢您提供一些最佳实践建议。还有很多东西要学。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 2012-08-29
    • 2011-12-22
    • 2013-11-25
    • 1970-01-01
    相关资源
    最近更新 更多