【问题标题】:Command line for using perl script on multiple files在多个文件上使用 perl 脚本的命令行
【发布时间】:2020-08-18 11:20:40
【问题描述】:

给我的 perl 脚本包含:

use strict;

open(IN1, "<".$ARGV[0]);
open(IN2, "<".$ARGV[1]);
open(OUT, ">".$ARGV[2]);

在开始时应该在多个 fastq 文件上运行。我不确定要使用什么命令行,以便 perl 脚本遍历文件夹中的多个文件。

我尝试的其中一条是:

perl script.pl *.fastq.gz

【问题讨论】:

  • 如果您想阅读 gzip 压缩文件,请查看 IO::Uncompress::Gunzip。 (还有 Bioperl,以避免不得不尝试编写自己的 fastq 格式阅读器)
  • 脚本有什么作用?根据其名称或 docs/cmets 有任何猜测吗?它真的接受压缩文件 (*.fastq.gz) 还是只接受未压缩文件 (*.fastq)?

标签: perl command-line command-prompt fastq


【解决方案1】:

这个程序期望被这样调用:

$ program.pl input1.dat input2.dat output.dat

所以你目前需要给它两个输入文件和一个输出文件。

如果您想将其更改为处理两个以上的输入文件,那么您(可能)仍然需要向它传递一个输出文件。可能是这样的:

$ program.pl *.fastq.gz output.dat

然后在你的代码中,你可以写:

my $outfile = pop @ARGV;
my @infiles = @ARGV;

您还必须更改打开文件句柄的代码,因为它目前被硬编码为使用两个输入文件和一个输出文件。

但是,还有其他需要考虑的事情。也许,根本不要打开任何文件。相反,将您的代码编写为 Unix 样式的过滤器。

$ program.pl input_files* > output.dat

然后只需从&lt;&gt;(空文件输入运算符)读取并写入STDOUT

【讨论】:

    【解决方案2】:

    根据问题中的三行代码,你应该给它正好三个参数:

    script.pl [input file 1] [input file 2] [output file]
    

    您尝试使用通配符不太可能正常工作(除非目录中存在正确的三个文件并且按目录列表中的正确顺序排序)。

    更糟糕的是,它可能损坏了与*.fastq.gz 匹配的第三个文件,因为脚本可能试图将输出写入其中,除非脚本有足够的错误检查以发现它得到了错误数量的参数并中止 - 而且,鉴于您发布的三个 open 语句中没有错误检查,它似乎不太可能进行这样的检查。

    【讨论】:

      【解决方案3】:

      像这样运行脚本的典型用法是

      perl script.pl in.1.fastq in.2.fastq out_file
      # or:
      perl script.pl in.1.fastq.gz in.2.fastq.gz out_file
      

      通常,两个输入文件是 read 1 和 read 2 fastq files,配对末端测序运行的结果,例如在 Illumina 测序仪上。

      在这种情况下使用 * 可能会出现问题,因为它可能会扩展到 2 个以上的文件(不是您想要的)。

      要运行一对以上的 fastq 文件,请执行以下操作。制作一个每行有 1 个示例名称的文件,例如文件 samples.txt 像这样(我假设示例名称中没有空格):

      sample_a
      sample_b
      ...
      

      然后在每个样本上运行脚本,读取 1 和读取 2:

      cat samples.txt | xargs -n1 -I{} perl script.pl {}.1.fastq {}.2.fastq {}.out
      

      这里,
      xargs -n1:为每个 1 个字符串执行命令(这里,为每一行),
      -I{}:将单词分配给{},然后我们将其重用于文件名.

      【讨论】:

        猜你喜欢
        • 2011-07-14
        • 2012-10-20
        • 2017-09-16
        • 1970-01-01
        • 2015-01-18
        • 2017-01-13
        • 1970-01-01
        • 2013-12-25
        • 2021-12-14
        相关资源
        最近更新 更多