繁体   English   中英

Perl,如何使用管道将多个文件放入同一个文件处理程序中?

[英]Perl, How can I use piping to cat multiple files into the same filehandler?

我一直试图将多个文件分配给单个文件句柄。 然后从那里处理整个文件句柄以查找某种模式,然后将其写入FIN_RESULTS。

的Linux
exp文件
我的/ dir1 /结果
我/目录2 /结果
等等

这是我尴尬的尝试

   open (FIN_RESULTS, ">", "FIN_RESULTS.txt") or die $!;

   open(RESULTS, "-|"," find my/ -name RESULTS -print0 | xargs -0 cat");
   while(<RESULTS>){
        if(/match_something/){
           do some commands;
           print FIN_RESULTS $_;
         }
close FIN_RESULTS;
close RESULTS;

但是我最后只是用当前目录的ls覆盖了perl脚本本身。

谢谢您的帮助!!!!! 我能够实现我最初的想法。

我还有第二个问题,是否可以以仅通过某些目录进行查找的方式来实现查找? 好像我有
my / abc_dir1 / RESULTS
my / dsa_dir2 / RESULTS
我/ afx_dir3 /结果

但我只想搜索dir2和dir3。

@array1 = qw( dir2 dir3);

foreach $array1(@array1)
{ open(RESULTS, "-|"," find my/*$array1 -name RESULTS -print0 | xargs -0 cat");
}

但是我收到这个错误,xargs:cat:被信号13终止。因此不允许多次重新打开文件句柄。 关于我可以做什么的任何建议?

假设您确实要进行外部查找:

open RESULTS, "-|", "find my -name RESULTS -print0 | xargs -0 cat"

应该做你想做的。

Perl中的open函数有两种格式:

两个参数调用:

open (RESULTS, "|find my/ -name 'RESULTS'")

这两个参数的调用很简单,但是如果碰巧文件名以垂直管道开头,则会遇到问题。

另一种是首选的三参数语法:

open (RESULTS, "-|", "find my/ -name 'RESULTS'")

此语法使用第二个参数声明您正在执行的打开类型:

">" -  Write
">>" - Append
"<"  - Read
"-|" - Read from command
"|-" - Write to command

看来您已经将两者混淆了。


请注意:

您可以使用做你的发现 ,而不是的Perl 文件::查找模块。

由于您无需启动单独的进程,而无需依赖操作系统,因此效率更高,因为它可以在Windows或Linux上以相同的方式工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM