[英]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.