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

Unix script for checking logs for last 10 days

我有一个日志 table,它只保留一天,table 的数据只存在一个 day.However,它的日志存在于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

我想对脚本进行参数化(参数将是阶段 table 名称),它会找到最近 10 天插入 table 和错误 table 的记录。

这可能吗?谁能帮我为此构建 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

谢谢。

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

find . -ctime -10 -type f -print 获取当前工作目录中 10 天或更早的文件的文件名。要在不同目录上 运行 将 . 替换为路径

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

paste -sd+加一个加号

bc 将数字流和运算符计算为一个答案

我无法使用查找。因为系统是 Solaris,所以 find 没有 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