perl - 将输出加载到文件/perl
问题描述
我正在计算 *.htm 文件文件夹中出现不同名称的次数。如何获得system "grep..."
写入输出文件而不是屏幕的调用?
打印到屏幕时,我已经完成了这项工作。一旦我尝试将其写入文件,我就会将名称和 0 写入文件,并将 grep 的计数写入屏幕。我找到了一些很好的建议来帮助我做到这一点,但现在它变得越来越具体了,我在搜索结果中发现了很多“噪音”。任何指向教程相关教程的指针都是最受欢迎的。
use strict;
use warnings;
open (INFILE, '<', "names.txt");
open (OUTFILE, '>', "report.txt");
while (my $row = <INFILE>) {
chomp $row;
my $name = "$row";
my $number = system "grep -o $name *.htm | wc -l";
print OUTFILE "$name\t $number\n";
}
close INFILE;
close OUTFILE;
我期待在 OUTFILE 中有这样的东西
Name1 245
Name2 198
Name3 79
我在 OUTFILE 中得到什么
Name1 0
Name2 0
Name3 0
我在屏幕上看到的
245
298
79
解决方案
系统函数运行命令并返回命令的状态码,即如果成功则返回0,否则返回错误码。
您要做的是使用反引号运算符来捕获命令的STDOUT而不是系统。
use strict;
use warnings;
open (INFILE, '<', "names.txt");
open (OUTFILE, '>', "report.txt");
while (my $row = <INFILE>) {
chomp $row;
my $name = "$row";
my $number = `grep -o $name *.htm | wc -l`;
print OUTFILE "$name\t $number\n";
}
close INFILE;
close OUTFILE;