使用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 ...
随机推荐
- 决策树之C4.5算法学习
决策树<Decision Tree>是一种预測模型,它由决策节点,分支和叶节点三个部分组成. 决策节点代表一个样本測试,通常代表待分类样本的某个属性,在该属性上的不同測试结果代表一个分支: ...
- 【MySQL】常见错误与经常使用命令的集锦
[背景介绍] 在使用SQL Server数据库期间,想必大家一定都有过解决各种问题的经历了.非常多时候,都会在大家的博客中看到问题与解决方式. 如今开发使用的是MySQL数据库.如今来看,发现 ...
- 辛星跟您玩转vim第三节之程序猿特须要的移动方式
前面第二节我首先值得一提的是,我的vim教程pdf版本号已经写完了.大家能够去下载,这里是csdn的下载地址:csdn下载.假设左边的下载地址挂掉了.也能够自行在浏览器以下输入例如以下地址进行下载:h ...
- 给Linux设置SSH登录邮件提醒
给Linux设置SSH登录邮件提醒 心血来潮,用 last 命令查看了登录记录,不看不知道,一看就有问题.竟然有两个陌生的IP ,一个是美国欧莱雅的,一个是北京联通的.真是郁闷,密码简单了真不行 后来 ...
- 用硬件卡克隆Linux集群
650) this.width=650;" onclick="window.open("http://blog.51cto.com/viewpic.php?refimg= ...
- 洛谷 P1068 分数线划定
P1068 分数线划定 题目描述 世博会志愿者的选拔工作正在 A 市如火如荼的进行.为了选拔最合适的人才,A 市对 所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试.面试分数线根 据 ...
- jsp+tomcat+ 创建project 配置project
*如今我们已经下载到了 tomcat 7.0+ eclipse for java ee 直接解压,打开eclipse. 接下来是步骤: eclipse 打开的界面.空空如也 ! ..* 点击 file ...
- SQL-.db 数据库查看常用指令(转载)
一下内容转载自http://blog.sina.com.cn/s/blog_74dfa9f401017s69.html 简介sqlite3一款主要用于嵌入式的轻量级数据库,本文旨在为熟悉sqlite3 ...
- wampserver安装后访问localhost出现 Forbidden问题
Forbidden You don't have permission to access / on this server. 修改php的配置文件httpd.conf. 在原有的位置文件中找到配置节 ...
- Dcloud课程4 如何进行APP接口开发
Dcloud课程4 如何进行APP接口开发 一.总结 一句话总结:通过json或者xml. 1.APP如何进行通信? 通过在地址上接参数指明传递的数据的类型.而数据传递的类型一般是XML和json. ...