`
john.cn
  • 浏览: 6553 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

日志分析,并将结果写入文件

 
阅读更多
#-----------------------------------------------------------------
#判断是否闰年
#input:year
#output: "true" "fase"
check_leap() 
{
    Y=`expr substr $1 1 4`
    r1=`expr $Y \% 4`
    r2=`expr $Y \% 100`
    r3=`expr $Y \% 400`
    if [ "$r1" -eq 0 -a "$r2" -ne 0 -o "$r3" -eq 0 ];then
        FRUN="true"
    else
        FRUN="false"
    fi
    echo $FRUN
}
#-----------------------------------------------------------------
# 获取月份最大日期
#方法1
get_mon_days()
{
    Y=`expr substr $1 1 4`
    M=`expr substr $1 5 2`
    case "$M" in
         01|03|05|07|08|10|12) days=31;;
         04|06|09|11) days=30;;
         02)
        _tmpStr=`check_leap "$Y"`  #判断是否闰年
        if [ "$_tmpStr" = "true" ] ; then
            #闰年
            days=29
        else
            days=28
        fi
        ;;
         *)
        days=0
        ;;
    esac
    echo $days
}
#-----------------------------------------------------------------
check_date()
{
    #检查是否传入一个参数
    [ $# -ne 1 ] && return 1
    #检查字符串长度
    _lenStr=`expr length "$1"`
    [ "$_lenStr" -ne 8 ] && return 1
    #检查是否输入的是非0开头的数字
    _tmpStr=`echo "$1" | grep "^[^0][0-9]*$"`
    [ -z "$_tmpStr" ] && return 1
    Y=`expr substr $1 1 4`
    M=`expr substr $1 5 2`
    D=`expr substr $1 7 2`
    #检查月份
    [ "$M" -lt 1 -o "$M" -gt 12 ] && return 1
    #取当月天数
    days=`get_mon_days "$Y$M"`
    #检查日
    [ "$D" -lt 1 -o "$D" -gt "$days" ] && return 1
    return 0
}



# -----------------------------------------------------------------------------
# 脚本说明:
# 	错误统计脚本
#	生成1.原始数据文件:errorReport.txt.yyyy-MM-dd 
#	    2.错误类型数据文件:errorReportType.txt.yyyy-MM-dd
# -----------------------------------------------------------------------------
# 参数1:统计日期,格式yyyyMMdd,为空则为当天
# 参数2:日志文件路径,为空默认当前目录
# 参数3:生成数据文件路径,为空默认当前目录
# -----------------------------------------------------------------------------


#!/bin/sh
if [ -n "$1" ]; then
   check_date $1
	if [ $? -eq 1 ];then
	    echo "<ERROR>输入日期[$1]格式错误!示例:(`date +%Y%m%d`)"
	    exit 1
	fi
   dt=$1
else
   dt=`date +'%Y%m%d'`
fi

if [ -n "$2" ]; then
   srcPath=$2
else
   srcPath=.
fi

if [ -n "$3" ]; then
   targetPath=$3
else
   targetPath=.
fi

# 日志文件
logFile=${srcPath}/UpopWeb.log.$dt*
# 生成的文件名,以yyyy-MM-dd结尾
formattedDate=${dt:0:4}-${dt:4:2}-${dt:6:2}
# 错误数据文件
errorReportFile=${targetPath}/errorReport.txt.$formattedDate
# 错误类型文件
errorReportTypeFile=${targetPath}/errorReportType.txt.$formattedDate

echo "<info>报文错误统计开始,日志文件:["$logFile"]"

# 判断文件是否存在
if (ls $logFile) >/dev/null 2>&1;then
	# 开始统计时间
	date_start=$(date +%s)
	
	# 统计原始表数据
	# 生成数据格式为:
	grep "=== OrderInfo Start ===" -A9 $logFile|
		grep "com.unionpay.upop.web.exceptions.ValidationException" -B8|
		awk 'BEGIN{FS="\n";RS="--\n"}{print $1,":" ,$2,":",$3,":",$4,":",$5,":",$6,":",$7,":",$9}'|
		awk -F ':' '{print $17,"|", $2,"|null|",$4,"|",$6,"|",$8,"|",$10,"|",$12,"|",$14,":",$15}'|
		awk '{gsub(/[ \t\n\r]/,"")}{print $1}'| 
		awk -v var="$formattedDate" '{print $1"|"var}'>$errorReportFile
	
	echo "<info>原始表数据文件生成完毕,路径:["$errorReportFile"]"
	
	# 统计错误类型
	createTime=`date +%Y-%m-%d\ %H:%M:%S`
	grep "=== OrderInfo Start ===" -A9 $logFile|
		grep "com.unionpay.upop.web.exceptions.ValidationException"|
		awk -v var="$createTime" -F ": " '{print $2"|"var}'|
		sort | uniq	>$errorReportTypeFile
		
	echo "<info>错误类型数据文件生成完毕,路径:["$errorReportTypeFile"]"
else
	echo "<error>["$logFile"]不存在"
fi

date_end=$(date +%s)
echo "<info>["$dt"]报文错误统计完毕,执行时间:$((date_end-date_start))秒"
分享到:
评论

相关推荐

    Python多线程超大日志文件解析转储写入mysql/postgresql

    Python多线程超大日志文件解析转储,实现几十G超大文件并发处理。 实现功能如下: 1.多线程分块解析某超大日志文件,实现超大文件多线程分块处理 2.多线程写入数据到数据库postgresql/mysql 3.线程之间通过队列queue...

    Android捕获全局异常并写日志保存到sd卡.rar

    初始化,把当前对象设置成UncaughtExceptionHandler处理器,处理异常时我们还可以把异常信息写入文件,以供后来分析。  保存错误信息到文件中 返回文件名称,我们定义了saveCrashInfo2File&#40;Throwable ex&#41;...

    c 文件写入和读取工具类

    内容概要: 上述代码演示了如何使用C语言进行文件的基本读写操作。...日志记录:将程序运行时的信息记录到文件中,以便后续分析和调试。 文件内容处理:如读取文本文件内容,进行编辑、搜索、替换等操作。

    shell 处理apache日志入库

    shell 处理apache日志入库 awk分析apache日志为*.sql文件 sqlplus写入oracle

    完整实现ftp上传与下载并解析csv文件

    完整实现ftp上传与下载并解析csv文件,并实现对文件内容进行分析及错误信息的提示及保存日志,并可以实现多个文件同时下载,并且同时解析

    Palo Alto防火墙生产环境logstash配置文件 PANOS 10.2.8 测试通过 - 2024最新版

    这个配置文件用于通过 logstash 解析Palo Alto Networks(PAN-OS)防火墙产生的Syslog日志,并将其转换为结构化的数据格式以便于后续处理和分析。 这个配置文件提供了以下功能: 1. 解析Palo Alto Networks(PAN-...

    FileCut 文件切割(分割)器

    “FileCut”是一款免费软件,并且不带任何插件,它适用于以下操作系统: Windows 2000、Windows XP、Windows 2003 Windows Vista、Windows 2008、Windows 7 ...价值段的日志,从而提升日志分析和问题定位效率。

    如何编写批处理文件批处理文件批处理文件

    内存,并被当作文件分析。因此,以下例子: FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i 会枚举当前环境中的环境变量名称。 另外,FOR 变量参照的替换已被增强。您现在可以使用下列 选项语法: ~I - ...

    Python实现监控程序执行时间并将其写入日志的方法

    主要介绍了Python实现监控程序执行时间并将其写入日志的方法,实例分析了Python日志操作的相关技巧,需要的朋友可以参考下

    python日志logging模块使用方法分析

    开发一个日志系统, 既要把日志输出到控制台, 还要写入日志文件 import logging # 创建一个logger logger = logging.getLogger('mylogger') logger.setLevel(logging.DEBUG) # 创建一个handler,用于写入日志文件 ...

    php文件操作之文件写入字符串、数组的方法分析

    场景二:代替输出函数打印一些数据,例如在支付的回调里面不好用echo、var_dump等直观地打印数据出来,就要用到写入文件来记录数据的方式,可以用于排除错误等。 记录当前时间,写入文件: 使用file_put_contents...

    清除SQLServer日志的两种方法

    日志文件满而造成SQL数据库无法写入文件时,可用两种方法: 一种方法:清空日志。 1.打开查询分析器,输入命令 DUMP TRANSACTION 数据库名 WITH NO_LOG 2.再打开企业管理器–右键你要压缩的数据库–所有任务–...

    spark streaming实时网站分析项目实战.rar

    2.python日志产生器测试并将日志写入到文件中 3.通过定时调度工具每一分钟产生一批数据 4.使用flume实时收集日志信息 5.对接实时数据到kafka并输出到控制台 6.spark streaming对接kafka的数据进行消费 数据采集详情...

    python 多进程和协程配合使用写入数据

    为空的记录,需要写入到日志文件中! 任务分工 1. 使用多进程技术,每一个进程读取一个txt文件 2. 使用协程技术,批量读取txt文件记录。比如一次性读取 2000条记录 注意:打开文件操作,最好在一个进程中,重复打开...

    http_json_logger:高朗。 要从 http api 获取 json 正文,请写入 json 文件,并每天进行轮换。 日志文件将用于 logstash json_lines

    一个日志上报收集服务, 可以收集从浏览器/js/android/ios等通过http上报的日志, 落地为文本文件, 用作后续日志统计/分析/数据挖掘等 A http json logger, implemented by golang. Just dump ...

    web_w3c日志导入mysql数据库

    由于网上常用的分析日志工具不能 满足要求 自己写的分析工具也不能满足在特殊情况下的要求 所以写了一个导入数据库的工具,只支持w3c格式的日志 日志编码必须是gbk如果是utf-8的 里面的中文会出错 所有字段写入...

    Python分块拆分txt文件中的数据.zip

    这个程序主要适用于需要处理大量文本数据的场景,例如日志分析、文本挖掘等。通过使用这个程序,用户可以更方便地管理和处理大量的文本数据,提高工作效率。该程序使用了Python的内置库,如os、sys等,实现了对文件...

    基于java+TCPIP课设简单网络嗅探器的设计(高分课程设计)

    基于java+TCPIP课设简单网络嗅探器...用命令行执行,显示相关结果并将数据写入日志文件。如运行Sniffer logfile;其中Sniffer是程序名,logfile表示捕获结果写入的日志文件名。或在此基础上用图形化界面实现上述功能。

    Quakealyzer:Quake3 日志文件分析器

    此过程解析 Quake3 专用服务器日志文件,分析条目并将它们写入数据库。 它是用 Python2.7 编写和测试的 Frontend 是一个完全编写的 Webfrontend,用于以漂亮的形式获取数据库内容。 有关详细信息,请阅读前端目录...

    计算机网络课程设计 解析IP数据包

    本实验的目标是捕获网络中的IP数据包,解析数据包的内容,见个结果显示在标准输出上,并同时写入日志文件。 程序的具体要求如下: 以命令行形式运行:ipparse logfile,其中ipparse是程序名,而logfile则代表记录...

Global site tag (gtag.js) - Google Analytics