首页 > 解决方案 > 将输出加载到文件/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

标签: perl

解决方案


系统函数运行命令并返回命令的状态码,即如果成功则返回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;

推荐阅读