【问题标题】:One liner for apache error logs to store as csv file一个用于将 apache 错误日志存储为 csv 文件的衬垫
【发布时间】:2015-03-05 05:30:33
【问题描述】:

我想转换如下所示的错误日志:

[ Message time ]  [Message Type] [IP Address] PHP Errpr Type: Some Message with comma in it

变成这样的东西,这样我就可以使用任何电子表格软件阅读它:

Message Time,Message Type,IP Address,PHP Errpr Type,Some Message with comma in it

我见过Get apache logs as csv fileApache-Access-Log-to-CSV-Converter Load Testing with JMeter: Part 3 - Replaying Apache Logs。这对我的情况没有帮助。

我编写了一个可以运行的 Bash 脚本,但是对于一个包含 600,000 行的文件,它需要花费大量时间。

#!/bin/bash -x

rm -fv final_file
IFS=$'\n'
for i in `cat error_log | tr '[]' '"'`
do
        MSG_MESSAGE="`echo $i|awk -F']' '{print $NF}'`"
        MSG_ERROR_TYPE="`echo $MSG_MESSAGE| awk -F':' '{print $1}'`"
        MSG_DEBUG_MESSGE="`echo $MSG_MESSAGE|cut -d':' -f2-|tr ',' '.'`"
        MSG_DATE="`echo $i|awk -F']' '{print $1}'| cut -d'[' -f2`"
        MSG_TYPE="`echo $i|awk -F']' '{print $2}'| cut -d'[' -f2`"
        MSG_CLIENT="`echo $i|awk -F']' '{print $3}'| cut -d'[' -f2`"
        echo "$MSG_DATE~$MSG_TYPE~$MSG_CLIENT~$MSG_ERROR_TYPE~$MSG_DEBUG_MESSGE" >> final_file
done
unset IFS

Bash 或 Perl,只要有效,什么都可以。

【问题讨论】:

    标签: bash perl csv


    【解决方案1】:

    sed 可以轻松处理:

    sed -r 's/^\[([^]]*)]\s*\[([^]]*)]\s*\[([^]]*)]\s*([^:]*):\s*/\1,\2,\3,\4,/' file
               ^^^^^^^^^^                                         ^^
                   |______________________________________________|
    

    这是一个捕获块并将它们打印回来的问题

    测试

    $ cat a
    [ Message time ]  [Message Type] [IP Address] PHP Errpr Type: Some Message with comma in it
    $ sed -r 's/^\[([^]]*)]\s*\[([^]]*)]\s*\[([^]]*)]\s*([^:]*):\s*/\1,\2,\3,\4,/' a
     Message time ,Message Type,IP Address,PHP Errpr Type,Some Message with comma in it
    

    【讨论】:

    • 非常感谢。这正是我想要的。
    【解决方案2】:

    对 fedorqui 的回答稍作修改是

    sed -r -e 's/([^]]*)$/"\1"/'  -e 's/\[//g' -e 's/\]/,/g' input
    

    本质上是一样的,但可以处理任意数量的 [括号] 项目并且更容易阅读 - 虽然如果你的文件很大,但不确定哪个会更快。

    【讨论】:

      猜你喜欢
      • 2010-09-08
      • 2014-05-24
      • 1970-01-01
      • 2010-10-07
      • 2017-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多