Bash apache错误日志作为csv文件存储的一行程序

Bash apache错误日志作为csv文件存储的一行程序,bash,perl,csv,Bash,Perl,Csv,我想转换如下所示的错误日志: [ 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 我见过,也见过。这对我的案子没有帮助 我写了一个Bash脚本,它可以工作,但是

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

[ 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
我见过,也见过。这对我的案子没有帮助

我写了一个Bash脚本,它可以工作,但是对于一个包含600000行的文件来说,它需要花费大量的时间

#!/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,只要它能工作,一切都可以。

这可以通过
sed
轻松处理:

sed -r 's/^\[([^]]*)]\s*\[([^]]*)]\s*\[([^]]*)]\s*([^:]*):\s*/\1,\2,\3,\4,/' file
           ^^^^^^^^^^                                         ^^
               |______________________________________________|
这是一个捕获块并将其打印回来的问题

试验
对费多尔基的回答稍加修改就可以了

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

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

非常感谢。这正是我想要的。
sed -r -e 's/([^]]*)$/"\1"/'  -e 's/\[//g' -e 's/\]/,/g' input