用于检查最近 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
我有一个日志 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