我有一个日志文件,它根据一组独特的特征以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中更快解决方案的任何想法?感谢。
答案 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