使用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. 洛谷 P3371 【模板】单源最短路径

    P3371 [模板]单源最短路径 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入输出格式 输入格式: 第一行包含三个整数N.M.S,分别表示点的个数.有向边的个数.出 ...

  2. linux 命令之 tar

    作用 tar命令是Unix/Linux系统中备份文件的可靠方法.差点儿能够工作于不论什么环境中,它的使用权限是全部用户. 语法: tar [主选项+辅选项] 文件或文件夹 主选项: c 创建新的归档文 ...

  3. [Python's] Python's list comprehensions a

    # Python's list comprehensions are awesome. vals = [expression for value in collection if condition] ...

  4. Flume的Events

    Flume NG传输的数据的基本单位是event,如果是文本文件,通常是一行记录,这也是事务的基本单位.

  5. Mahout应用

    不多说,直接上干货! Mahout作为Apache基金会的顶级项目之一,Mahout的应用也极其广泛,一般分为商业应用和学术应用. 在商业应用中,Adobe AMP公司使用Mahout的聚类算法把用户 ...

  6. 利用日志使管理Linux更轻松

    利用日志使管理Linux更轻松 操作系统的日志主要具有审计与监测的功能,通过对日志信息的分析,可以检查错误发生的原因,监测追踪入侵者及受到攻击时留下的痕迹,甚至还能实时的进行系统状态的监控.有效利用日 ...

  7. js中event事件处理

    1. HTML事件  直接添加到HTML结构中 function show() { alert('hello'); } <body> <button id="btn&quo ...

  8. ActiveMQ学习总结(6)——ActiveMQ集成Spring和Log4j实现异步日志

    我的团队和我正在创建一个由一组RESTful JSON服务组成的服务平台,该平台中的每个服务在平台中的作用就是分别提供一些独特的功能和/或数据.由于平台中产生的日志四散各处,所以我们想,要是能将这些日 ...

  9. 洛谷——U10783 名字被和谐了

    https://www.luogu.org/problem/show?pid=U10783 题目背景 众所周知,我们称g是a的约数,当且仅当g是正数且a mod g = 0. 众所周知,若g既是a的约 ...

  10. 【Energy Forecasting】能源预測的发展和展望

    说明 本文的内容来自Tao Hong博士的Energy Forecasting: Past, Present and Future一文的翻译和整理. 引入 能源预測包括了电力行业中有关预測的广泛的内容 ...