将文件中给分割的多行合并成一行
被分割的行特点:首行顶头,次行一空格开头,可以存在N个次行。
eg:
1111111 //顶头写
222222 //以空格开头
333333 //以空格开头
实际上在文件中这三行本是一行的:1111111222222333333只是因为过长所以被按上面形式分割开来。
下面是将文件还原到一行的脚本:在对文件进行行处理之前用得上。
#! /usr/bin/perl -w
##by yingying.liu @ 2013.3.28 11:03
###Release 1.0
my $ldapfile = "ldapinfo.txt"; //源文件
my $resfile = "tmpfile.txt"; //目标文件
my $linkline = " "; //做行链接的
my $preline = " "; //前一行
my $tmpline = " "; //临时行
my $flag = 0;
open FILE,"$ldapfile";
open OK,">>$resfile";
foreach my $line (<FILE>){ //line是当前行
//第一种情况:以空格开头并且上一行不是以空格开头
if(($line =~ /^ (.*)/) && ($tmpline !~ /^ (.*)/)){
chomp($tmpline); //去掉上一行行末的换行符
$linkline = $tmpline.$1; //上一行与本行内容链接
$tmpline = $linkline; //备份到临时行
$flag = 1;
next;
}
//第二种情况:如果当前行不是以空格开头并且上一行是连接过的
elsif(($line !~ /^ (.*)/) && $flag == 1)
{
$printline = $linkline."\n"; //上一行加上换行符
print OK $printline; //输出上一行到文件
$tmpline = $line; //当前行保存以备链接用
$preline = $line; //当前行保存
$flag = 0; //置零
next;
}
//第三种情况:不以空格开头并且上一行没有经过连接
elsif(($line !~ /^ (.*)/) && $flag == 0){
print OK $preline; //打印上一行
$preline = $line; //当前行保存
$tmpline = $line; //当前行保存以备链接
}
}
print OK $preline; //打印最后一行.
close (FILE);
close (OK);
system("mv out_ldap.txt out_ldap.txt.org"); //调用system函数执行shell命令
system("mv tmpfile.txt out_ldap.txt");