だから私は3つの引数を取るPerlスクリプトを書こうとしています。
- 最初の引数は、入力ファイルまたはディレクトリです。
- ファイルの場合、すべての単語の出現回数をカウントします
- ディレクトリの場合、各ディレクトリを再帰的に調べて、それらのディレクトリ内のファイル内のすべての単語の出現回数をすべて取得します。
- 2 番目の引数は、出現回数が最も多い単語をいくつ表示するかを表す数値です。
- これにより、各単語の番号のみがコンソールに出力されます
- コマンドラインの 3 番目の引数である出力ファイルに出力します。
ディレクトリを再帰的に検索し、ファイル内のすべての単語の出現を見つけてコンソールに出力する限り、機能しているようです。
これらを出力ファイルに出力するにはどうすればよいですか。また、2 番目の引数 (たとえば 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);
}
}
}
}