【问题标题】:For loop with two input files带有两个输入文件的 for 循环
【发布时间】:2017-03-29 18:20:55
【问题描述】:

我希望对需要两个输入文件的命令使用 for 循环。两个文件之间只有一个字符更改。以下是两个示例文件:

Fay2_TCCGGAGA-CCTATCCT_L001_R1_001.fastq
Fay2_TCCGGAGA-CCTATCCT_L001_R2_001.fastq

这是我对该命令的尝试:

for f in /directory/*R1*.fastq
 pref=${basename "$f" _*R1*.fastq}
command input1 $f input2 ${pref}_*R2*.fastq

问题很可能在于操作基本名称,因此循环使用 file1 的排列来查找 file2。如何使基本名称短于整个文件名。我收到错误

Fay2_TCCGGAGA-CCTATCCT_L001_R2_001.fastq_*R2.fastq does not exist

感谢 cmets 下面的循环工作正常,但是每当命令循环一个新文件时,我的文件就会被覆盖。以下是我的整个命令,需要命名两个输出文件。

for f1 in /directory/*R1*.fastq
f2="${f1/_R1_/_R2_}"
 pref=${basename "$f" _*R1*.fastq}
command output1 ${pref}_trim_R1.fastq output2 ${pref}_trim_R2.fastq input1 $f input2 $f2

【问题讨论】:

    标签: linux bash unix for-loop


    【解决方案1】:

    您可以遍历 R1 文件并使用大括号扩展来派生 R2 文件名:

    for r1_file in /directory/*_R1_*.fastq; do
      r2_file="${r1_file/_R1_/_R2_}"
      command input1 "$r1_file" input2 "$r2_file"
    done
    

    【讨论】:

    • 谢谢这很好用。我现在对这些文件的命名有疑问。我将编辑我的帖子来解决这个问题
    • 已解决:只需将 pref 行中的 $f 更改为 $f1 即可。感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 2013-03-19
    • 2014-06-02
    • 2021-07-25
    • 2020-04-29
    • 2014-07-29
    • 2014-06-21
    • 2018-11-22
    • 2021-12-20
    相关资源
    最近更新 更多