Shell 用于检查过去10天日志的Unix脚本
我有一个日志表,它只维护一天,表中的数据只存在一天。但是,它的日志存在于unix目录中 我的要求是检查过去10天的日志,并找到加载的记录数 在日志文件中,模式如下(teradata的fastload日志) 我想对脚本进行参数化(参数将是stage table name),它查找过去10天插入到表和错误表中的记录 这可能吗?有人能帮我构建这个unix脚本吗 日志目录中有许多日志。如果a只想检查以下内容,该怎么办:Shell 用于检查过去10天日志的Unix脚本,shell,unix,scripting,teradata,Shell,Unix,Scripting,Teradata,我有一个日志表,它只维护一天,表中的数据只存在一天。但是,它的日志存在于unix目录中 我的要求是检查过去10天的日志,并找到加载的记录数 在日志文件中,模式如下(teradata的fastload日志) 我想对脚本进行参数化(参数将是stage table name),它查找过去10天插入到表和错误表中的记录 这可能吗?有人能帮我构建这个unix脚本吗 日志目录中有许多日志。如果a只想检查以下内容,该怎么办: bash-3.2$ ls -ltr 2018041*S_EVT_ACT_FL
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 $2}'|paste -sd+| bc
find-ctime-10-type f-print
获取当前工作目录中10天或更短时间的文件名。要在其他目录上运行,请将
替换为路径
awk-F='/Total Records Read/{print$2}'
using=作为字段分隔符,过滤掉包含关键字短语的任何行的后半部分读取的记录总数
粘贴-sd+
添加加号
bc
将数字和运算符流计算成一个答案我无法使用find。因为系统是Solaris,所以find没有maxdepth future。我使用用例创建一个过滤器2并使用它
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
谢谢,沃斯普林,如果我想检查以下特定文件: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 4511 18:12 20180411181205_EVT_ACT_FLD.log还收到错误:rgs:儿童被信号杀死13稍微简化一点,试着让它一直执行到awk部分。粘贴-sd+的用途是什么?正如我在上面解释的(很抱歉我不清楚),
paste-sd+
命令在输入中添加了一个加号。它还将各条线连接在一起。我建议您运行seq 19
,然后运行seq 19 | paste-sd+
,以演示此日志表,该日志表只维护了一天,这是Teradata的QueryLog吗?然后,它会被卸载到历史数据库中,即所有信息都应保留在系统中。亲爱的Dnoeth,不,这是每天运行的fload日志。如果您需要超过1天的时间,您就不应该删除,不能有大量数据:-)
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