分析访问日志数据以适应DB窗体

2024-04-16 12:06:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个web访问CSV文件,其中包含一些类似的统计信息(通常约20K条记录,但这是一个只有6条记录的示例):

servlet name, HTTP RC, response time, request timestamp
/servlet_A,200,3,[10/Nov/2013:11:00:12 +0000]
/servlet_B,302,10,[10/Nov/2013:11:00:12 +0000]
/servlet_C,200,17,[10/Nov/2013:11:00:12 +0000]
/servlet_A,200,30,[10/Nov/2013:11:00:15 +0000]
/servlet_B,302,16,[10/Nov/2013:11:00:15 +0000]
/servlet_C,200,11,[10/Nov/2013:11:00:15 +0000]

我需要将其解析为以下格式:

servlet name, requests count with latency in range 0-5, latency range 6-10, latency range 11-15, ...., latency range 196-200, HTTP 200 count, HTTP 302 count
servlet_A,1,0,0,0,0,1,0,....,2,0
servlet_B,0,1,0,1,0,0,0,....,0,2
servlet_C,0,0,1,1,0,0,0,....,2,0

这些文件位于基于CentOS的服务器上,服务器上有Perl、Python、Bash等工具。输出文件将被用来加载到我没有访问权的第三方MySQL数据库中。你知道吗

我试着用bash写这篇文章,但是我的数学有点不对劲,我试着用除以5来计算延迟计数,例如延迟=11和11/5=2.2,然后向上取整。这意味着应该在第三个位置加上1的增量,但我在正确解析它时遇到了问题。你知道吗

也许有其他的选项来执行这个(使用本地构建的数据库和导出文件)或其他一些选项,我现在意识到关闭,所以任何帮助都是非常感谢的!你知道吗


Tags: 文件csvname服务器web信息数据库http
1条回答
网友
1楼 · 发布于 2024-04-16 12:06:24

这对于一次性数据转换来说既快又难看,而且不遵循任何良好编码实践的约定:-)。假设您的数据位于data.txt。不输出任何标题。你知道吗

#! /usr/bin/perl

# Sub-program to calculate latency counts for number range
# params: key, latency lower limit, latency upper limit
sub latencyCounts {
  $latency_total = 0;
  for ($i = $_[1]; $i <= $_[2]; $i++) {
    $latency_total += $latency_counts{$_[0]}[$i];  
  }
  return $latency_total;
}

# parse file and add data to arrays
open (FOO, "< data.txt");
while (<FOO>) {
  chomp;
  if (/^\/(.+),(\d{3}),(\d+),\[.+\]$/) {
    $httpcode_counts{$1}[$2]++;
    $latency_counts{$1}[$3]++;
  }
}
close (FOO);

# calculate and output totals
foreach (sort keys %httpcode_counts) {
  $key = $_;
  printf ("%s,%d,%d,%d,%d,...,%d,%d\n",
      $key,
      latencyCounts($key, 0, 5),
      latencyCounts($key, 6, 10),
      latencyCounts($key, 11, 195),
      latencyCounts($key, 196, 200),
      $httpcode_counts{$key}[200],
      $httpcode_counts{$key}[302]);
}

exit;

有人可能会在不到一半的代码中得到相同的结果。。。?你知道吗

相关问题 更多 >