|
假如有下面文本内容:
05-11 00:00:00.329 [bbb:INFO] <execute:56 :> Task:'pushMailProcessJob' execute successfully aaa
afdafsda
afdafdaf
afdafsd
afdas2010-05-11
afdadf
afdasdf
adfasdf
05-11 00:00:02.095 [bbb:INFO] <execute:56 :> Task:'onlineUserClear' execute successfully aaa
bbb
aaa
05-11 00:00:02.640 [bbb:INFO] <execute:56 :> Task:'onlineUserClear' execute successfully aaaa
05-11 00:00:02.640 [bbb:INFO] <execute:56 :> Task:'onlineUserClear' execute successfully aaaa
......
想把上面的文本按照时间进行分解:把他们写入不同的文件中;比如上面的文本,按颜色分解成4个文本。
以下是自己写的脚本,帮忙完善下:
## 日志文件的时间,可以通过参数传入或者从日志文件中提取
log_date="05-11"
##日志文件名称
log_file_name="/tmp/log_test/log.2010-05-11"
## 日志文件的总行数
file_line_count=`wc -l ${log_file_name} | awk '{print $1}'`
echo ${file_line_count}
##异常记录的总行数
exception_line_count=`grep "^${log_date}" ${log_file_name} | wc -l`
echo ${exception_line_count}
execut_count=1
# 记录行索引
row_index=1
##循环文件的每一行
if [ "${execut_count}" -le "${file_line_count}" ]; then
##自己的想法,没效果(关键是在这个地方求的记录的具体行)
##awk 'BEGIN {j = '${row_index}'; if (NR > '${row_index}' && NR < '${file_line_count}') { if($1 != '${log_date}') print $0 } }' ${log_file_name} >> aa.txt
## 自己的想法,没效果
##提取exception到文件中(第几行到第几行)
sed -n '${row_index},8p' ${log_file_name} > aa.txt
fi
以上是自己脚本的一个思路,就是脚本中红色的部分不知具体如何写,如何确定每条记录从哪一行开始?希望那个大哥,帮帮小弟。
补充:文本分为四种颜色,就是最终要分解之后四个文本中的内容。至于脚本中红色的部分,是一个判断逻辑,我想在这个逻辑里面得到每一个exception 是从哪一行开始,到哪一行结束的,再用命令sed来将每个exception分解到每个文件中:sed -n '开始位置,结束位置p' ${log_file_name} > aa.txt |
|