【发布时间】:2012-03-02 16:17:43
【问题描述】:
给定一个大的输入文件,如下所示:
02/26/2012 08:54:38 Error:java.sql.Exception
02/26/2012 08:54:48 Error:java.sql.Exception
02/26/2012 08:56:05 Error:java.sql.Exception
02/26/2012 08:57:21 Error:java.sql.Exception
02/26/2012 08:59:29 Error:java.sql.Exception
02/26/2012 09:01:14 Error:java.sql.Exception
02/26/2012 09:08:48 Error:java.sql.Exception
02/26/2012 09:10:41 Error:java.sql.Exception
我正在尝试找出每小时的错误计数;也就是说,我正在寻找一个看起来像这样的输出文件:
02/26/2012 08 -> 5
02/26/2012 09 -> 3
这是一个适合我的脚本:
#!/bin/perl
open(MYFILE, 'tata2');
my %table;
while (<MYFILE>) {
chomp;
$dtkey = substr $_, 0, 13;
$table{$dtkey}++;
}
close(MYFILE);
for my $key (keys %table) {
print "$key -> $table{$key}\n";
}
但是考虑到 Perl 的特性,我很确定这可以用更少的代码来完成。 如果你能提供一些例子,我将不胜感激。我希望它对那些想要减少为实现某些目标而编写的代码行数的人有用。
【问题讨论】:
-
不是 Perl,而是
sed 's/:.*//' | uniq -c
标签: perl optimization coding-style hash