匹配日志文件中的日期模式,将其与当前日期进行比较并打印相应的行

时间:2016-12-22 14:18:17

标签: shell unix awk sed grep

我想创建bash脚本,将日志文件中每行的日期当前日期进行比较如果差异超过 1天,则会将相应的行打印到另一个文件。

你能支持吗?

以下是一个示例日志文件:

2016-09-29 23:40:14 GST;2016-09-29 23:40:14 GST;faultManager:network@ET_AO_L_0165_abcd@eNBEquip@eNBInst@x2Grp-0@x2Access-0_424_02_ET_AO_L_0165_abcd_44159@x2Transp-0|alarm-2632-3-698;
2016-11-01 07:10:51 GST;2016-11-01 07:10:51 GST;faultManager:network@ER_AO_L_4283_abcd@eNBEquip@eNBInst@x2Grp-0@x2Access-0_424_02_ER_AO_L_4283_abcd_10197@x2Transp-0|alarm-2632-3-698;
2016-11-01 07:10:51 GST;2016-11-01 07:10:51 GST;faultManager:network@ER_AO_L_4283_abcd@eNBEquip@eNBInst@x2Grp-0@x2Access-0_424_02_ER_AO_L_4283_abcd_11339@x2Transp-0|alarm-2632-3-698;
2016-11-01 07:10:51 GST;2016-11-01 07:10:51 GST;faultManager:network@ER_AO_L_4283_abcd@eNBEquip@eNBInst@x2Grp-0@x2Access-0_424_02_ER_AO_L_4283_abcd_14179@x2Transp-0|alarm-2632-3-698;
2016-11-01 11:26:58 GST;2016-11-01 11:26:58 GST;faultManager:network@ET_AO_L_0166_abcd@eNBEquip@eNBInst@x2Grp-0@x2Access-0_424_02_ET_AO_L_0166_abcd_14126@x2Transp-0|alarm-2632-3-698;
2016-11-03 10:00:08 GST;2016-11-03 10:00:08 GST;faultManager:network@ET_AO_L_0193_abcd@eNBEquip@eNBInst@x2Grp-0@x2Access-0_424_02_ET_AO_L_0193_abcd_16113@x2Transp-0|alarm-2632-3-698;

这是我到目前为止实施的内容:

IFS=$'\n' read -d '' -r -a lines < /cygdrive/f/Script_X2/Final/Test/ActiveX2Alarms2.log

for i in "${lines[@]}"
do
echo $i > /cygdrive/f/Script_X2/Final/Test/abcd.log
toDate=`awk -F";" '{print $1}' /cygdrive/f/Script_X2/Final/Test/abcd.log`
echo $toDate

toDate2=`date -d"${toDate}" +'%Y-%m-%d'`
echo "toDate2: $toDate2"

currentDate=`date +'%Y-%m-%d'`
echo "currentDate: $currentDate"

diff=`$currentDate - $toDate`
echo $diff

if [ `$currentDate - $toDate2` -gt 1 ]; 
then
    awk -F";" '{print $4}' /cygdrive/f/Script_X2/Final/Test/abcd.log >> SiteIDs_extracted.log
fi

done

1 个答案:

答案 0 :(得分:2)

这是awk中的一个:

$ awk -v d="$(date -d "yesterday" +'%Y-%m-%d %H:%M:%S')" '$1 " " $2 < d' file

它将昨天的时间戳设置为d,并输出之前有时间戳的记录。