我有一个日志表,维护一天,表中的数据只存在一天。但是,它的日志存在于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
感谢。
答案 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