使用shell或perl展开分组数据

时间:2015-03-05 16:59:32

标签: performance bash perl

我有一个日志文件,它根据一组独特的特征以5分钟为增量对http请求进行分组。格式如下:

beginTime endTime平台主机名osVersion os requestType httpStatus nbInstances

所以示例日志行可以是:

1423983600 1423983900 platform1 test01 8.1 win createAcct 200 15

这表明在5分钟的时间范围内,有15个具有此唯一属性集的请求。我想要做的就是在输出文件中生成15行相同的行。

现在我有一个非常简单的脚本,可以完成工作但可能效率不高:

#!/bin/bash

file=$1
count=0
cat $file | while read line
do
string=`echo $line | awk '{print $1,$2,$3,$4,$5,$6,$7,$8}'`
nbInst=`echo $line | awk '{print $9}'`
while [[ $count -lt $nbInst ]]
do
echo "$string" >> test_data.log
count=`expr $count + 1`
done
count=0
done

关于bash或perl中更快解决方案的任何想法?感谢。

1 个答案:

答案 0 :(得分:1)

正如评论中所提到的那样 - 您需要将事件解除合并以进行处理和索引,这似乎是不寻常的。

然而,这应该是你所要求的:

#!/usr/bin/perl

use strict;
use warnings;

#uses DATA segment from below as file. You'll probably want either STDIN
#or open a file handle. 
while (<DATA>) {
    #separate line on whitespace
    my @line = split;
    #grab the last element of the line (pop returns the value, and removes
    #from the list)
    for ( 1 .. pop(@line) ) {
        print join( " ", @line ), "\n";
    }
}

__DATA__
1423983600 1423983900 platform1 test01 8.1 win createAcct 200 15