首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

求:perl文本处理,拜托啦!解决办法

2012-02-28 
求:perl文本处理,拜托啦!a.txt中的文本内容大概是:yyyymmddhhmmss xxxxx xxxxx xxxxyyyymmddhhmmss xxxxx

求:perl文本处理,拜托啦!
a.txt中的文本内容大概是:
yyyymmddhhmmss xxxxx xxxxx xxxx=
yyyymmddhhmmss xxxxx xxxxx xxxx
yyyymmddhh xxxxx xxxxx xxxx=

要把a.txt 的内容按照要求放在b.txt中,b中的格式应该达到:
yyyymmddhh xxxxx xxxxx xxxx
yyyymmddhh xxxxx xxxxx xxxx
yyyymmddhh xxxxx xxxxx xxxx

也就是把假如有等号的行的等号去掉,把前面的时间只取到yyyymmddhh,长出来的行要么去掉不要,要么就只取前10个字符。 

这个用perl可以实现吗? 因为我没用用perl编过程序,最好能把代码贴出来,谢谢各位大侠了~~~!

[解决办法]
perl干这个最在行了

open FPI, "a.txt";
open FPO, ">b.txt";
while (my $line = <FPI>) {
$line =~ s/\s+$//g;
print length $line."\n";
if ($line =~ m/^(\d{10})\S* (.*?)=$/) {
print FPO "$1 $2\n";
} elsif ($line =~ m/(\d{10})\S* (.*?)$/) {
print FPO "$1 $2\n";
}
}
close FPI;
close FPO;
[解决办法]
用一行awk就好了:
[code=Awk][xxx@xx]$ awk '{gsub("=","");$1=substr($1,1,10);print}'[/code]
[解决办法]

Perl code
[xxx@xx]$ awk '{gsub("=","");$1=substr($1,1,10);print}'
[解决办法]
第5行没有)啊
还有一个问题可能是你的解释环境不支持中文,先不加注释,把所有中文去掉试下
[解决办法]
匹配出来之后,每一行就剩下“$1 $2”了,长度函数是length
$txt = $1.' '.$2;
if (length $txt == 37) {
print ...
}

热点排行