给定一个大型的输入文件,长这样:
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的特点,我非常确定这可以在更少的代码行数内完成。 如果您能提供一些示例,我将不胜感激。我希望这对那些想要减少编写代码行数的人有所帮助。
sed 's/:.*//' | uniq -c
。 (注解:该命令用于在 Unix 或 Linux 系统中统计文件中每个唯一的行前面出现的重复行数,其中sed 's/:.*//'
用于截取以冒号为分隔符的第一个字段,uniq -c
用于计数并输出唯一行的数量和相应的计数。) - Keith Thompson