【问题标题】:Match date pattern from log file, compare it to current date and print the corresponding line匹配日志文件中的日期模式,将其与当前日期进行比较并打印相应的行
【发布时间】:2016-12-22 14:18:17
【问题描述】:

我想创建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

【问题讨论】:

  • 日志文件中给出了两个日期。 2016-09-29 23:40:14 GST;2016-09-29 23:40:14 GST; 哪个日期需要与当前日期比较或两者相同?
  • 编辑了问题并添加了我到目前为止所做的代码,两个日期相同,所以让我们考虑第一个。
  • 问题在于您认为某些命令会做什么,例如diff=`$currentDate - $toDate`。这至少应该报告一条错误消息。你认为这个命令从两个日期得到天数的差异吗?

标签: shell unix awk sed grep


【解决方案1】:

这是 awk 中的一个:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    • 2015-10-12
    • 1970-01-01
    相关资源
    最近更新 更多