中易网

perl 读取文件夹下所有txt,并处理数据

答案:1  悬赏:10  
解决时间 2021-01-17 09:28
  • 提问者网友:呐年旧曙光
  • 2021-01-16 09:04
perl 读取文件夹下所有txt,并处理数据
最佳答案
  • 二级知识专家网友:慢性怪人
  • 2021-01-16 10:36
还是昨天的那个程序,假设你的文件分为 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
";
foreach my $key ( keys %info )
{
$times=$info{$key}{'times'};
@users = keys $info{$key}{'users'};
$usercount = $#users+1;
print "$key,$usercount,$times
";
}注意:读取文件头到$head变量的那句已经注释掉了。



此时运行方法为: perl my.pl 1.txt 2.txt 3.txt 就可以了


perl自己会把所有文件内容都读进来处理的
追问现在是想只传入文件夹名称,不知道可不可以追答每个文件都有文件头么?追问不明白文件头的意思 就是txt保存的时候确实是以1.txt,2.txt这样的形式保存的 然后保存在名字为20131222的文件夹下追答就是 pord,manu,mach,imei,imsi,op,ver,lwsf,pi,date 这行是不是每个文件都有,因为处理的时候需要略过这行,因此有还是没有是影响逻辑的追问pord,manu,mach,imei,imsi,op,ver,lwsf,pi,date 这一行每个文件都是没有的,上次我只是举个例子说明那个数据大概代表什么意思追答将文件放在与my.pl所在目录下的一个子目录下,运行方式 pl011.pl ./files,程序取了所有.txt的文件进行处理,已简单测试:
$argnum = @ARGV;
die "Usage my.pl dirname" if($argnum != 1 );
die "$ARGV[0] is not a dir" if( ! -d $ARGV[0] );
$dirname = $ARGV[0];
#print "dir is $dirname
";
@files = glob("$ARGV[0]/*.txt");
@ARGV = @files;

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
";
foreach my $key ( keys %info )
{
$times=$info{$key}{'times'};
@users = keys $info{$key}{'users'};
$usercount = $#users+1;
print "$key,$usercount,$times
";
}来自:求助得到的回答
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息