本脚本作用 : 从特定文件夹中打开一系列的有规律的文件,并将其中特定的元素提取出来
思路:利用循环依次打开各个符合条件的文件,将文件内容分割成数组,提取的元素是有着特定的数组下标。最后输出为文件。
脚本:
#!/usr/bin/perl -w
use strict; #这两行是标准控制,规范编码
my @fil;
my @filename; #有需要在外面申明一下这两个函数
my $dir='/ifs4/HST/PROJECT/SGD/v9/TG20160329/'; #所提取的文件夹的路径,存为$dir,方便修改;修改这个就可以了
opendir DIR,"$dir" or die;#opendir #函数打开$dir的路径,DIR是句柄。待提取的各个文件就在$dir下。
while(@filename=readdir(DIR)) # readdir函数读取DIR中的文件,同时存为数组@filename
{
@fil=grep /^1.*?sh/,@filename; #grep函数对文件名进行匹配,匹配成功的文件名输出为新的数组@fil。^1.*?sh 表示以1开头,sh结尾的所有文件
print "@fil"; #对新数组输出,查验结果 (可以不要)
print "\n";
}
open MM,">fqq.txt"or die; #open函数以写入的方式打开名为fqq.txt的文件。没有该文件则新建。文件中有内容将覆盖(从头输入)(<<则是不覆盖式输入)
foreach (@fil){
open IN, "$dir/$_"or die; # $dir/$_ 表示的是一个文件。对于每一个@fil 的元素(包括文件后缀的文件名)输入的默认读取参数记录在$_上($_是个很常用)
while(){
chomp;
my @s=split(/ /,$_); #对每个文件中的文字进行划分。用空格作为识别符并在空格处切割成一个个数组的元素。最终组成数组@s
print MM"$s[5]\t"; #按照自己想要的格式输出文件。\t 表示一个tab的空格。这样导入进excel的的时候就可以被清晰划分进一个个单元格。
print MM"$s[7]\t";
print MM"$s[9]\t";
print MM"$s[21]\t";
print MM"$s[19]\n"; #每一行的最后一个元素输出后用反斜杠转义字符换行输出。当然,具体格式
}
}
close DIR; #前面打开(open),后面就要有close。close一般放在后面比较好
close IN; #我对句柄的理解是:把操作寄存在句柄上,方便调用
close MM;
本人菜鸟一枚,言论错误,多多指正,互相帮助。竢实扬华!
网友评论