windows下的split命令小脚本
时间:2010-11-17
来源:互联网
因为要在windows下分割文件,写了个模仿Unix下split命令的小脚本,权作新手练习。
复制代码
存为split.pl ,该脚本符合split命令格式:
格式: split.pl [-n] file [name]
参数说明:
-n: 指定截断的每一文件的长度,不指定缺省为1000行
file: 要截断的文件
name: 截断后产生的文件的文件名的开头字母,不指定,缺省为x,即截断后产生的文件的文件名为x1,x2,x3....
例:
split -100 myfile ddd
将文件myfile依次截断到名为ddd1,ddd2,ddd3.....的文件中,每一文件的长度为100行
- use strict;
- use warnings;
-
- my ($linenum,$file,$pre);
-
- if ($ARGV[0]=~/^\-/) {
- ($linenum,$file,$pre)=@ARGV;
- $linenum=~s/-(.*?)/$1/;
- } else {
- #如果不指定分割的行数则默认分割为1000行
- $linenum=1000;
- ($file,$pre)=@ARGV;
- }
-
- die "请输入要分割的文件!" unless defined($file);
-
- die "找不到该文件:$file!" unless -e $file;
-
- #通过把文件读入到一个数组来获取它的行数
-
- my $num;
- {
- open IN,"$file" || die "打开文件错误:$!";
- my @arr=<IN>;
- $num=@arr;
- close IN;
- }
-
- die "错误:一共才$num行,如何分$linenum输出?请调整你的参数!\n" if $num<=$linenum;
-
- #分多少个文件输出
-
- my $filenum=$num/$linenum;
-
- #如果上面的不是整除,则增加一个文件,这里用简单的正则表达式来判断
-
- $filenum=int($filenum+=1) if $filenum=~/.*\..*/;
-
- print "原文件共$num行,分割为每个文件$linenum的话,共有$filenum个文件输出。\n";
-
- #通过判断行数进行分割输出到多个文件名以数字顺序命名的文件,如1.txt、2.txt等
-
- for (my $x=1;$x<=$filenum;$x++) {
- open IN,"$file" || die "打开文件错误:$!";
- my $fname=defined($pre)?"$pre$x":"x$x";
- open OUT,">$fname.txt";
- while (<IN>) {
- print OUT $_ if $.<=$x*$linenum and $.>($x-1)*$linenum;
- }
- close OUT;
- close IN;
- }
-
- print "文件分割完成!\n";
格式: split.pl [-n] file [name]
参数说明:
-n: 指定截断的每一文件的长度,不指定缺省为1000行
file: 要截断的文件
name: 截断后产生的文件的文件名的开头字母,不指定,缺省为x,即截断后产生的文件的文件名为x1,x2,x3....
例:
split -100 myfile ddd
将文件myfile依次截断到名为ddd1,ddd2,ddd3.....的文件中,每一文件的长度为100行
作者: x9x9 发布时间: 2010-11-17
为什么不用Getopt::Long
作者: 黑色阳光_cu 发布时间: 2010-11-17
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28