LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 937|回复: 1

求助Linux脚本解析文本内容--几个细节不知如何实现

[复制链接]
发表于 2010-6-28 23:28:11 | 显示全部楼层 |阅读模式
假如有下面文本内容:
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
发表于 2010-6-29 02:07:02 | 显示全部楼层
awk '/^05-11/{filename=$1.$2.txt}{print $0>filename}' logfilename
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表