使用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. STL_算法_查找算法(search、find_end)

    C++ Primer 学习中. .. 简单记录下我的学习过程 (代码为主) search          //从左往右找第一个符合条件的子区间    全部容器适用 find_end  //从右往左找 ...

  2. 5.使用SOAP的XML消息传递

    转自:https://blog.csdn.net/u014066037/article/details/51724658 使用SOAP的XML消息传递的简易流程图: 详细步骤如下: (1)服务请求者的 ...

  3. 41.C++多线程生产消费者模型

    #include <iostream> #include <thread> #include <mutex> #include <condition_vari ...

  4. Android 多线程下载,断点续传,线程池

    你可以在这里看到这个demo的源码: https://github.com/onlynight/MultiThreadDownloader 效果图 这张效果图是同时开启三个下载任务,限制下载线程数量的 ...

  5. 请求不携带cookie问题

    因为后端需要用到cookie做一些判断,所以在post请求前先写入了cookie.在页面未登录时,调接口能带上cookie,登录后的请求没有携带cookie,但是能看到cookie已经保存了. (ax ...

  6. 词向量 word2vec

    看的这一篇的笔记 http://licstar.net/archives/328 看不太懂. 要学的话,看这里吧,这里把一些资料做了整合: http://www.cnblogs.com/wuzhitj ...

  7. C++源文件到可运行文件的过程

    一.四个步骤    对于C/C++编写的程序,从源码到可运行文件,一般经过以下四个步骤: 1).预处理,产生.ii文件 2).编译,产生汇编文件(.s文件) 3).汇编,产生目标文件(.o或.obj文 ...

  8. FreeNX

    freenx 在Linux下,我们最常使用的远程管理工具是ssh客户端,比如putty.SecureCRT等,但是ssh只提供字符界面的操作方式,有时我们需要图形界面的操作,在Linux下支持图形界面 ...

  9. 109.vprintf vfprintf vscanf vfscanf

    vprintf //输出到屏幕 int POUT(char *str, ...) { va_list arg_p=NULL; //读取 va_start(arg_p, str); //接受可变参数 i ...

  10. 79.cgi硬盘查询个人信息

    运行截图: 把cgi编码转为char*类型 //把cgi编码转为char*类型 char* change(char *str) { //分配内存 ); //x是tempstr的下标,y是str的下标 ...