【问题标题】:In Perl - Need to modify a script to parse all files in a directory在 Perl - 需要修改一个脚本来解析一个目录中的所有文件
【发布时间】:2015-03-07 17:53:39
【问题描述】:

我几乎没有 Perl 经验,因此非常感谢任何帮助。如果我没有在问题中提供明确的信息,我很抱歉,因为我没有编程背景。

我有一个脚本,它将解析一个文本文件,检查文本文件中一定数量的数据点,然后输出“# of data points = X”。我可以让它在单个文本文件上运行,我可以让它输出到一个很棒的文本文件。

但是,我需要大量解析和分析数据的 138 个文本文件,都在一个目录中。我想知道是否可以修改脚本以转到目录,在其中的每个文件上运行,并将结果一起输出到文本文件中,而不是运行这个单独的脚本 138 次。

我没有编写原始脚本,我继承了它,只是勉强弄清楚如何让它在单个文本文件上运行。

【问题讨论】:

  • 除非您显示要修改的代码,否则我们无能为力。数据文件内容的示例也会有所帮助。
  • 发布您的脚本、示例输入、所需输出。
  • for %f in (*.*) do perl myscript.pl %f ...也就是说,学习如何使用你的shell。

标签: perl directory


【解决方案1】:

你也可以做一个 glob,像这样。

my @files = </path/where/files/are/*>;

foreach my $file (@files) {
    print "working on $file...\n"
    # do stuff with $file;
}

【讨论】:

  • 谢谢,这很有帮助。结果,我一直在取得一些进展。我现在可以让脚本打印“正在处理文件...”以及目录中的所有文件名。但是,我无法让它实际运行“带有 $file 的东西”。令人沮丧的是,我可以为单个文件运行脚本并让它工作。当我将该脚本复制到 'stuff with $file' 部分时,它只是不起作用。无论如何,我非常感激!
【解决方案2】:

如果你的问题是打开同目录下的138个文件,可以使用“opendir”函数一一打开,打开ALL FILES并打印所有行的脚本示例:

#!/usr/bin/perl
use strict;
use warnings;

my $directory = '/tmp';

opendir (DIR, $directory) or die $!;
    while (my $file = readdir(DIR)) {
        print "$file\n";
    open (FILE, $file) or die $!;
    while (<FILE>) {
        print $_;
        }
}
closedir(DIR);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    • 2012-05-06
    • 2014-03-05
    • 2012-09-10
    • 2013-06-11
    • 1970-01-01
    • 2017-11-27
    相关资源
    最近更新 更多