my @files
files('.', \@files)
print "$#files @files\n"
my @local
@local = glob("./*")
print "$#local @local\n"
sub files {
my $path = shift
my $arr = shift
opendir(my $H, $path) || return
my @f = readdir($H)
close($H)
for my $f(@f) {
my $p = "$path/$f"
next if ($f =~/^[.]+$/)
if (-f $p) {
push @$arr, $f
}
else {
files($p, $arr)
}
}
}
前提,你windows下装了perl环境。 代码:test.pl 'c:\usrdirctory' 'd:\out.txt' 两个参数分别为:你要遍历的目录路径;你要保存有用信息的文件路径。 如果不方便用命令行调用的话,就写死在下面的$dir,$dst后面。 例如 $dir = 'c:\usrdirctory'...还是昨天的那个程序,假设你的文件分为 1.txt 2.txt 3.txt,这个时候不要包含文件头,即所有的文件都是内容
程序修改为:
#$head = <>while(<>)
{
@line = split(/,/,$_)
$lwfs = $line[7]
$user = join('|',$line[1],$line[2],$line[3],$line[4],$line[6],$line[7])
$info{$lwfs}{'times'} +=1
$info{$lwfs}{'users'}{$user} +=1
}
print "lwsf,user,times\n"
foreach my $key ( keys %info )
{
$times=$info{$key}{'times'}
@users = keys $info{$key}{'users'}
$usercount = $#users+1
print "$key,$usercount,$times\n"
}
注意:读取文件头到$head变量的那句已经注释掉了。
此时运行方法为: perl my.pl 1.txt 2.txt 3.txt 就可以了
perl自己会把所有文件内容都读进来处理的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)