Perl练习题,持续更新中...
发布时间:2020-12-15 23:56:35 所属栏目:大数据 来源:网络整理
导读:?? 自己做的,有更好的答案可以贴上来,电脑是英文系统,编辑器中文显示有问题,所以写的英文注释(英语小白,勿喷) 1.在目录/tmp下找到100个以abc开头的文件,然后把这些文件的第一行保存到文件new中。 #user/bin/env perl#file name : test.pl#author : Ton
|
??
自己做的,有更好的答案可以贴上来,电脑是英文系统,编辑器中文显示有问题,所以写的英文注释(英语小白,勿喷) 1.在目录/tmp下找到100个以abc开头的文件,然后把这些文件的第一行保存到文件new中。 #user/bin/env perl
#file name : test.pl
#author : Tony Sun
#version : 1.0
#date : 2014-6-26 11:01:29
=head function descripte
read first line in each files which name start with $startwith in folder $path
write it to a file named $write_file_name
$path : the path of files
$write_file_name: the file name which been wroted
$startwith : the ragular of the file name
$num : the number of the documents to satisfy the conditions
=cut
sub func_find_and_save{
my($path,$write_file_name,$startwith,$num) = @_;
#get folder&file handler
opendir(TMP,$path) || die "open folder failed,cause by:$!";
open(WRITEFILE,">$write_file_name") || die "open file $write_file_name failed,cause by:$!";
my $flag = 0;
my $open_failed = 0;
#filte files and get the first line in the file which satisfy the condition
foreach $file_name (readdir TMP)
{
next if(!($file_name =~ /^$startwith/));
$file = $path."/".$file_name;
if(-f $file)
{
if(open(FILE,$file))
{
$line = <FILE>;
print WRITEFILE $line;
$flag++;
close(FILE);
last if($flag>=$num);
}
else
{
$open_failed++;
}
}
}
#close handlers
close(WRITEFILE);
close(TMP);
#info user the result after execute this function
if($flag==$num)
{
print "finished!n";
}
else
{
printf "got %d files which name start with '$startwith!'",$flag+$open_failed;
print "open failed : $open_failedn" if ($open_failed>0);
}
}
# function test
func_find_and_save("tmp","new","Action",100);
2.写脚本实现,可以用shell、perl等。把文件b中有的,但是文件a中没有的所有行,保存为文件c,并统计c的行数。(忽然发现文件句柄都没关闭)
#!user/bin/env perl
#file name : test.pl
#author : Tony Sun
#version : 1.0
#date : 2014-6-26 11:43:50
=head function descripte
two files named $file_a and $file_b,fetch rows that in $file_a and not in $file_b,write those rows to $file_c,and give out the row numbers in $file_c
$file_a : file for compare
$file_b : file for compare
$file_c : file for deposit row than in $file_a and not in $file_b
=cut
sub func_compare_files{
my($file_a,$file_b,$file_c) = @_;
#get file operate handler
open("FILE_A","<$file_a") || die "open file $file_a failed,cause by:$!";
open("FILE_B","<$file_b") || die "open file $file_b failed,cause by:$!";
open("FILE_C",">$file_c") || die "open file $file_c failed,cause by:$!";
#get one row each time in $file_a,and compare with each rows in $file_b
#if it is not in file_b,then print it out to file_c
#(it maybe not the best method to handle this question,but it is the method think of now)
my $diff_rows = 0;
my @lines_b = <FILE_B>;
while(my $line_a = <FILE_A>)
{
my $flag = 0;
foreach my $line_b (@lines_b)
{
if($line_a eq $line_b)
{
$flag++;
last;
}
}
print FILE_C $line_a if($flag==0);
$diff_rows++ if($flag==0);
}
close(FILE_A);
close(FILE_B);
close(FILE_C);
print "finished,and $diff_rows rows in $file_cn";
}
#function test
func_compare_files("a","b","c");
3.输入一个数字组成的字符串,插入“+”,“-”,使得计算结果为0.(非递归版和递归版)。正在做ing
??
??
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
