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