Perl 将以数字开头的文件复制到另一个目录
我已经解决了1个问题,但还剩下2个问题。 有人能帮我吗 从目录local dir中,列出以数字0..9开头的所有文件以及哪个文件 分机是。宋 创建子目录“local dir/selected”,在该目录中,您将在之后复制这些文件中的每一个 对每一行中的每一非空行进行编号 在一个名为stats.txt的文件中,打印出关于每个文件的以下信息: 许多非空行。 b段数。这里的段落是由非空行和 以文件开头、文件结尾或 用空行表示。 c以行数表示的段落平均大小。 d如果是或否,文件中的所有段落长度相同。 奖金问题: 检测每个文件中出现的每个押韵。 f给出押韵行与总行数的比率 对于1:Perl 将以数字开头的文件复制到另一个目录,perl,Perl,我已经解决了1个问题,但还剩下2个问题。 有人能帮我吗 从目录local dir中,列出以数字0..9开头的所有文件以及哪个文件 分机是。宋 创建子目录“local dir/selected”,在该目录中,您将在之后复制这些文件中的每一个 对每一行中的每一非空行进行编号 在一个名为stats.txt的文件中,打印出关于每个文件的以下信息: 许多非空行。 b段数。这里的段落是由非空行和 以文件开头、文件结尾或 用空行表示。 c以行数表示的段落平均大小。 d如果是或否,文件中的所有段落长度相同。 奖
#!/usr/bin/perl
use strict;
use warnings;
my $directory = '/local_dir';
opendir (DIR, $directory) or die $!;
while (my $file = readdir(DIR))
{
# Use a regular expression to find files ending in .song.txt
next unless ($file =~ m/\.song.txt$/);
print "$file\n";
}
closedir(DIR);
exit 0;
以下是您如何进行第一步和第二步:
#!/usr/bin/env perl
use strict;
use warnings;
use autodie;
my $src_dir = '';
my @files = glob $src_dir . qq([0-9]*.song.txt);
my $dest_dir = 'selected';
mkdir $dest_dir;
for my $file (@files) {
open my $fin, "<", $file;
open my $fout, ">", "$dest_dir/$file";
my $c = 1;
while (<$fin>) {
$_ = $c++ . " $_" unless /^$/;
print $fout $_;
}
}
您可以使用查找感兴趣的文件,而不是使用opendir,从数字[0-9]开始,以.song.txt结束。创建输出目录后,for循环遍历这些文件,并在目标目录中创建一个同名的新文件。while循环遍历输入文件的每一行。如果每行的开头不是空的,它会在每行的开头添加一个数字,即该行的开头后面不会紧跟着行的结尾/^$/。然后将该行写入新文件
至于第三步,我认为值得您亲自尝试一下,如果您遇到问题,可以问一个新问题。我不知道您的脚本目前如何查找以数字开头的文件。我想知道您是否尝试过我的解决方案。如果是的话,它有效吗?