写一个perl程序,要运行在log文件上的,把每一行开始有“error“都挑出来,不管这行开始之前有没有空格,把挑出来的这些行转到standard error stream去, 剩下的转去standard output stream。 都挑完后,算出总共挑了几行出来。确保这个程序能同时运行多个文件!
比如有个log文件里有:
ERROR - general error 42.
Login successful. No ERROR found.
ERROR unexpected exception in pid 97.
ERROR: pid 97 terminated
当我们运行 cat logdata | 我的program.pl, 然后我们选出1,3,4行,最后写出“there were 3 errors”。
拜托拜托!!!
perl高手求救!!!写一个perl程序
答案:3 悬赏:80 手机版
解决时间 2021-03-03 09:20
- 提问者网友:沦陷
- 2021-03-03 01:27
最佳答案
- 五星知识达人网友:逃夭
- 2021-03-03 02:11
一定要使用 cat logdata | 我的program.pl 这种方式吗?
如果在perl脚本里打开文件会简单的多。
如果在perl脚本里打开文件会简单的多。
全部回答
- 1楼网友:狂恋
- 2021-03-03 04:23
如我在要求里说的,如果使用全局变量,那么就很容易实现了。我是想看看python用什么方法也可以实现perl、c中的static类型的变量。因此,二楼的方法其实是不符合要求的,呵呵其实《learn python》一书中也提到了类似的解答方法,除了使用class外,另外两种办法就是三楼和四楼两位的解决办法了。此外,似乎使用generator语法并不能达到我想要的目的 ):
- 2楼网友:罪歌
- 2021-03-03 03:00
#!/usr/bin/perl -w
use strict;
foreach my$file(@ARGV)
{
my $errnum = 0;
open LOG,$file || die "can't open log file: $file\n";
while()
{
if (/^\s+ERROR/i)
{
$errnum ++;
print STDERR $_;
}
else
{
print $_;
}
}
close LOG;
print STDERR "-" x 50 , "\n";
print STDERR "There are $errnum error in file \"$file\"\n\n";
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯