【发布时间】:2012-01-03 20:26:18
【问题描述】:
在带有多个管道的 Perl 脚本中有一个 system() 调用,使用单个标量参数。调用看起来或多或少是这样的:
system("zcat /foo.gz | grep '^.{6}X|Y|Z' | awk '{print $2,$3,$4,$6}' | bzip2 > /foo.processed.bz2");
有问题的文件 (foo.gz) 相当大,压缩后大小约为 2GB。我想这就是为什么它最初是通过系统调用完成的。
问题:
现在的问题是,无论系统命令之一是否失败,这个系统调用似乎总是返回 0。我认为这是因为它是通过sh -c '...' 调用的。对吗?
如果只传递一个标量参数,有没有办法检查system() 调用是否成功?
有没有更好的方法来处理这样的大文件,以同样或更高效率的方式(主要是在速度方面)?
感谢任何提示,因为我对 Perl 不是很熟悉。
【问题讨论】:
-
如果您通过 perl 中的系统调用使用 grep...您不是在 perl 中编程 :)
-
我知道,这是别人写的一些旧 Perl 代码,我也没有真正的经验,多好的组合 :) 无论如何,也许你给我一些想法如何做得更好以更优雅的方式?
-
还有 $2, $3 部分引用 perl 代码中的变量,而不是 awk 代码。因为双引号。
标签: perl