使用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分割文件的更多相关文章

  1. Perl按行分割文件

    Perl按行分割文件 将一个文件按照行数,均等的分割成多个小文件,例如,一个550行的文件,分割为每个文件有100行,则将分割为6个小文件 运行结果 参考代码(split_file.pl) #!/us ...

  2. 基于log4net的支持动态文件名、按日期和大小自动分割文件的日志组件

    最近处理一个日志功能,用log4net的配置不能完全满足要求,所以在其基础上简单封装了一下,支持以下功能: 1 零配置 内置默认配置,引用dll后不需要添加或修改任何配置文件也可以使用 2 动态指定文 ...

  3. PHP上传大文件 分割文件上传

    最近遇到这么个情况,需要将一些大的文件上传到服务器,我现在拥有的权限是只能在一个网页版的文件管理系统来进行操作,可以解压,可以压缩,当然也可以用它来在线编辑.php文件. 文件有40M左右,但是服务器 ...

  4. perl 遍历文件夹,获取全部文件

    main #!/usr/bin/perl my ($path) = @ARGV; sub scan_file{ my @files = glob(@_[0]); foreach (@files){ i ...

  5. Linux split命令参数及用法详解---linux分割文件命令

    转载自:http://blog.csdn.net/xiaoshunzi111/article/details/52173994 功能说明:分割文件. Split:按指定的行数截断文件 格式: spli ...

  6. Linux命令(十二) 分割文件 split 合并文件 join

    一.分割文件 split 命令介绍 当处理文件时,有时需要将文件做分割处理,split 命令用于分割文件,可以分割文本文件,按指定的行数分割,每个分割后的文件都包含相同的行数.split 可以分割非文 ...

  7. Perl中文件读取操作

    Perl中文件读取操作 http://blog.csdn.net/yangxuan12580/article/details/51506216

  8. perl 操作文件指针

    之前使用perl 脚本写了一个读取文件的小工具,但是由于当时使用的Tie 的方式,在处理大文件时,效率并不十分理想,所以在网上搜索了perl 如何操作文件指针的文章,自己也学习一下,本博客就是学习过程 ...

  9. 使用Perl合并文件

    使用Perl合并文件 有时需要将整个目录下的小文件合并到一个文件中,以便查阅检索 特性 整个目录完全遍历,自动存入单个文件 顺序遍历文件 待合并的目录 合并后的文件内容 syscfg/test1 sy ...

随机推荐

  1. iOS报错 -pie can only be used when targeting iOS 4.2 or later

    近期,使用师兄的project时.突然报错之前没发现这个错误.信息例如以下: ld: -pie can only be used when targeting iOS 4.2 or later cla ...

  2. artDialog提示框、对话框

    /** * 警告 * @param {String}消息内容 */ artDialog.alert = function (content, callback) { return artDialog( ...

  3. 使用Ant打包Android应用具体解释——Ant使用解析

    上篇<使用Ant打包Android应用具体解释>描写叙述了使用Ant打包的流程,但非常多步骤并没有说明如此做的原因,本篇将从Ant方面来理解,下一篇从APK生成的流程来说明. APK包的生 ...

  4. heap-adb shell查看堆栈使用

    今天在使用eclipse中的heap查看oom的时候,发现手机(eng版本)非常的卡,后来换成usr版本,又连接不上eclipse.最后听别人说,可以使用adb shell进行查看.指令如下 adb ...

  5. C#发送邮件DEMO

    虽然网上有很多类似的DEMO,但是还是整个封装好的例子,以便以后用: 发送邮箱是直接在web.config配置的. protected void Button1_Click(object sender ...

  6. ORA-16047: DGID mismatch between destination setting and standby

    主库有报错如下: ORA-16047: DGID mismatch between destination setting and standby 原因:主库参数设置错误,检查下列参数:log_arc ...

  7. UML类图与类图中的关系

    以下内容摘自<Java与模式> 在类与类之间,会有连线指明它们之间的关系.类和类.类和接口.接口和接口之间可以建立以下几种关系:一般化关系.关联关系.聚合关系.合成关系和依赖关系,这几种关 ...

  8. 2018/8/15 qbxt 测试

    2018/8/15 qbxt 测试 期望得分:100:实际得分:50   不知道为什么写挂了,明明是个水题 T^T 思路:模拟 注意:如果用 char 类型存储的话,如果有'z' + 9 会爆char ...

  9. Linux中删除文件,磁盘空间未释放问题追踪

    在客户使用我们产品后,发现一个问题:在删除了文件后.磁盘空间却没有释放.是有进程在打开这个文件,还是其它情况?我们一起来看看一下两个场景 一. 场景一:进程打开此文件 当一个文件正在被一个进程使用时. ...

  10. x264代码剖析(三):主函数main()、解析函数parse()与编码函数encode()

    x264代码剖析(三):主函数main().解析函数parse()与编码函数encode() x264的入口函数为main().main()函数首先调用parse()解析输入的參数,然后调用encod ...