用于检查最近10天日志的Unix脚本

时间:2018-04-16 11:40:23

标签: shell unix scripting teradata

我有一个日志表,维护一天,表中的数据只存在一天。但是,它的日志存在于unix目录中。

我的要求是检查过去10天的日志,并找到我加载的记录数。

在日志文件中,模式类似于此(teradata的快速加载日志)。

**** 13:16:49 END LOADING COMPLETE

     Total Records Read              =  443303
     Total Error Table 1             =  0  ---- Table has been dropped
     Total Error Table 2             =  0  ---- Table has been dropped
     Total Inserts Applied           =  443303
     Total Duplicate Rows            =  0

我希望脚本能够参数化(参数将是阶段表名称),它可以找到过去10天内插入表和错误表的记录。

这可能吗?任何人都可以帮我为此构建unix脚本吗?

日志目录中有许多日志。如果想要仅检查以下内容该怎么办:

    bash-3.2$ ls -ltr 2018041*S_EVT_ACT_FLD*
-rw-rw----+  1 edwops   abgrp      52610 Apr 10 17:37 20180410173658_S_EVT_ACT_FLD.log
-rw-rw----+  1 edwops   abgrp      52576 Apr 11 18:12 20180411181205_S_EVT_ACT_FLD.log
-rw-rw----+  1 edwops   abgrp      52646 Apr 13 18:04 20180413180422_S_EVT_ACT_FLD.log
-rw-rw----+  1 edwops   abgrp      52539 Apr 14 16:16 20180414161603_S_EVT_ACT_FLD.log
-rw-rw----+  1 edwops   abgrp      52538 Apr 15 14:15 20180415141523_S_EVT_ACT_FLD.log
-rw-rw----+  1 edwops   abgrp      52576 Apr 16 15:38 20180416153808_S_EVT_ACT_FLD.log

感谢。

2 个答案:

答案 0 :(得分:1)

find . -ctime -10 -type f -print|xargs awk -F= '/Total Records Read/ {print $2}'|paste -sd+| bc

find . -ctime -10 -type f -print获取当前工作目录中10天或更短时间的文件的文件名。要在不同的目录上运行,请使用路径

替换.

awk -F= '/Total Records Read/ {print $2}'使用=作为字段分隔符过滤掉包含关键短语
的任何行的后半部分 总记录阅读

paste -sd+添加加号

bc将数字和运算符流评估为单个答案

答案 1 :(得分:0)

我无法使用find。因为系统是Solaris,找不到maxdepth的未来。我使用case创建一个FILTER2并将其用于

ls -l --time-style=long-iso FOLDER | grep -E $FILTER.

但我知道这不是一个好方法。

LOCAL_DAY=`date "+%d"`
LOCAL_MONTH=`date "+%Y-%m"`
LASTTENDAYE_MONTH=`date --date='10 days ago' "+%Y-%m"`

case $LOCAL_DAY in 
    0*)
       FILTER2="$LASTTENDAY_MONTH-[2-3][0-9]|$LOCAL_MONTH";;
    1*)
       FILTER2="$LOCAL_MONTH-0[0-9]|$LOCAL_MONTH-1[0-9]";;
    2*)
       FILTER2="$LOCAL_MONTH-1[0-9]|$LOCAL_MONTH-2[0-9]";;
esac