使用Perl分割文件
使用Perl分割文件
特性
使用换行作为分界
忽略注释行#
分割存入新指定的文件中
待分割的文件test.lst
wwdg/prescaler
syscfg/test1
syscfg/test2
uart/uart7/uart7_dma1
uart/uart7/uart7_dma2
分割后的文件结构
Perl代码genlst.pl
#!/usr/bin/perl
use warnings;
###########################################
#cut up file
#
#cut_flie.pl test.lst
###########################################
my $find_ip =0;
my $find_begin = 0;
my $line_index = 0;
my $lstname = "error";
my $past_line = "error";
my $infile= $ARGV[0];
open(INFILE, " $infile") || die ("Could not open file $infile ! \n");
if(-z $infile){
print "\nFile is blank!\n";
exit;
}
#覆盖lst中的文件,需手动删除已经存在的文件
my $dir = "lst"; #创建存放目录
if(-e $dir){
}
else{
mkdir $dir;
}
#删除lst中的文件
#my $dir = "lst"; #创建存放目录
#if(-e $dir){
# unlink glob "$dir/* $dir/.*"
#}
#else{
# mkdir $dir;
#}
# get file lines amount
my @fileline = <INFILE>; #得到文件的行数
my $line_num = @fileline;
close INFILE;
unlink "temp.lst";
open(TEMPA, ">> temp.lst") || die ("Could not open file temp.lst! \n");
open(INFILE, " $infile") || die ("Could not open file $infile ! \n");
while ($line = <INFILE>){
$line_index ++;
chomp($line);
if($line =~ /^#/) { #find "#" at the beginning, don't care
next;
}
if($line =~ /^(\w+)[\s\$\W]*/){ #匹配捕获字符串,非空行
if($past_line =~ /^$/){ #上一行为空最为分界
print TEMPA "\n\n";
my $full_lstname = $lstname."_lst";
print "$dir\/$full_lstname\n";
rename "temp.lst", "$full_lstname";
close TEMPA; #完成一个文件的分割
system"mv $full_lstname lst";
print "\n\n";
unlink "temp.lst";
open(TEMPA, ">> temp.lst") || die ("Could not open file temp.lst! \n"); #继续进行下一个文件处理
}
$line =~ /^(\w+)[\s\$\W]*/ ; #正则处理,得到文件名
print TEMPA "$line \n";
print "$line \n";
$lstname = $1;
}
if($line_index == $line_num){ #单独处理最后行情况
print TEMPA "\n\n";
#print "\n\n";
my $full_lstname = $lstname."_lst";
print "$dir\/$full_lstname\n";
rename "temp.lst", "$full_lstname";
close TEMPA;
system"cp $full_lstname lst";
unlink "$full_lstname";
}
if($line =~ /^\s*$/){
if($line_index == 1){
next;
}
if($past_line =~ /^$/){
next;
}
}
$past_line = $line; #保存上一行情况
}
close INFILE;
close TEMPA;
unlink "temp.lst";
unlink "lst/error_lst";
使用Perl分割文件的更多相关文章
- Perl按行分割文件
Perl按行分割文件 将一个文件按照行数,均等的分割成多个小文件,例如,一个550行的文件,分割为每个文件有100行,则将分割为6个小文件 运行结果 参考代码(split_file.pl) #!/us ...
- 基于log4net的支持动态文件名、按日期和大小自动分割文件的日志组件
最近处理一个日志功能,用log4net的配置不能完全满足要求,所以在其基础上简单封装了一下,支持以下功能: 1 零配置 内置默认配置,引用dll后不需要添加或修改任何配置文件也可以使用 2 动态指定文 ...
- PHP上传大文件 分割文件上传
最近遇到这么个情况,需要将一些大的文件上传到服务器,我现在拥有的权限是只能在一个网页版的文件管理系统来进行操作,可以解压,可以压缩,当然也可以用它来在线编辑.php文件. 文件有40M左右,但是服务器 ...
- perl 遍历文件夹,获取全部文件
main #!/usr/bin/perl my ($path) = @ARGV; sub scan_file{ my @files = glob(@_[0]); foreach (@files){ i ...
- Linux split命令参数及用法详解---linux分割文件命令
转载自:http://blog.csdn.net/xiaoshunzi111/article/details/52173994 功能说明:分割文件. Split:按指定的行数截断文件 格式: spli ...
- Linux命令(十二) 分割文件 split 合并文件 join
一.分割文件 split 命令介绍 当处理文件时,有时需要将文件做分割处理,split 命令用于分割文件,可以分割文本文件,按指定的行数分割,每个分割后的文件都包含相同的行数.split 可以分割非文 ...
- Perl中文件读取操作
Perl中文件读取操作 http://blog.csdn.net/yangxuan12580/article/details/51506216
- perl 操作文件指针
之前使用perl 脚本写了一个读取文件的小工具,但是由于当时使用的Tie 的方式,在处理大文件时,效率并不十分理想,所以在网上搜索了perl 如何操作文件指针的文章,自己也学习一下,本博客就是学习过程 ...
- 使用Perl合并文件
使用Perl合并文件 有时需要将整个目录下的小文件合并到一个文件中,以便查阅检索 特性 整个目录完全遍历,自动存入单个文件 顺序遍历文件 待合并的目录 合并后的文件内容 syscfg/test1 sy ...
随机推荐
- 洛谷 P1850 换教室
P1850 换教室 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 2n2n 节课程安排在 nn 个时间段上.在第 ii(1 \leq ...
- 【OC学习-8】存取器方法?getter和setter?事实上就是赋值和返回值的两种函数
我们在声明类的时候,有实例变量+方法(函数),这些实例变量假设默认的话都是protected类型,一般无法直接訪问.更别提赋值和调用了,所以就产生了两种函数,getter函数就是可以返回实例变量的值, ...
- android:giavity和layout_gravity的差别
android:gravity: 是对该view中内容的限定.比方一个button 上面的text. 你能够设置该text 相对于view的靠左,靠右等位置. android:layout_gravi ...
- VBA调试利器debug.print
作者:iamlaosong 百度一下.非常easy找到debug.print解释和使用介绍.事实上非常简单.就是将代码运行结果显示在"马上窗体"中,但不影响程序运行.VBA程序调试 ...
- Fragment-按返回键程序退出
今天在做fragment的时候,发现一个问题,当我的界面停留在fragment的时候,按物理返回键,这时候会推出整个应用.这当然不是我们期望的,我们期望按返回键以后,应用界面返回添加fragment之 ...
- Scala中的“=>”和“<-”
“=>”符号大概可以看做是创建函数实例的语法糖,例如 args.foreach(arg => println(arg)) 大概可以看做 args.foreach(Function(arg) ...
- STM32之CAN通讯接收过滤器过滤分析
一.前言 学习了CAN通讯,底层的东东CAN控制器已经帮你处理完成,也就是CAN通讯协议已经做好,你按协议格式往对应的位扔数据发送就好,所以使用CAN通讯,我们只需要去关心制定发送的数据间的协议,也就 ...
- 基于Redis bitmap实现开关配置功能
作者:zhanhailiang 日期:2014-12-21 bitmap api SETBIT key offset value 对key所储存的字符串值,设置或清除指定偏移量上的位(bit). 位的 ...
- HDU 1848(sg博弈) Fibonacci again and again
Fibonacci again and again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- 终于研究出如何设置新版paypal付款时汇率损失方的问题了
http://bbs.55haitao.com/thread-1686005-1-1.html 终于研究出如何设置新版paypal付款时汇率损失方的问题了 登录paypal后,选"设置&qu ...