所以我正在尝试编写一个 Perl 脚本,它将接受 3 个参数。
- 第一个参数是输入文件或目录。
- 如果是文件,会统计所有单词出现的次数
- 如果是目录,它将递归遍历每个目录并获取这些目录中文件中所有单词的所有出现次数
- 第二个参数是一个数字,它将显示出现次数最多的单词的数量。
- 这将仅将每个单词的数字打印到控制台
- 将它们打印到输出文件,该文件是命令行中的第三个参数。
它似乎正在递归搜索目录并查找文件中所有出现的单词并将它们打印到控制台。
如何将这些打印到输出文件,以及如何获取第二个参数,即数字,比如 5,并让它在控制台打印出出现次数最多的单词,同时将单词打印到输出文件?
以下是我到目前为止所拥有的:
#!/usr/bin/perl -w
use strict;
search(shift);
my $input = $ARGV[0];
my $output = $ARGV[1];
my %count;
my $file = shift or die "ERROR: $0 FILE\n";
open my $filename, '<', $file or die "ERROR: Could not open file!";
if ( -f $filename ) {
print("This is a file!\n");
while ( my $line = <$filename> ) {
chomp $line;
foreach my $str ( $line =~ /\w+/g ) {
$count{$str}++;
}
}
foreach my $str ( sort keys %count ) {
printf "%-20s %s\n", $str, $count{$str};
}
}
close($filename);
if ( -d $input ) {
sub search {
my $path = shift;
my @dirs = glob("$path/*");
foreach my $filename (@dirs) {
if ( -f $filename ) {
open( FILE, $filename ) or die "ERROR: Can't open file";
while ( my $line = <FILE> ) {
chomp $line;
foreach my $str ( $line =~ /\w+/g ) {
$count{$str}++;
}
}
foreach my $str ( sort keys %count ) {
printf "%-20s %s\n", $str, $count{$str};
}
}
# Recursive search
elsif ( -d $filename ) {
search($filename);
}
}
}
}