【发布时间】: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`。这至少应该报告一条错误消息。你认为这个命令从两个日期得到天数的差异吗?