我想创建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
答案 0 :(得分:2)
这是awk中的一个:
$ awk -v d="$(date -d "yesterday" +'%Y-%m-%d %H:%M:%S')" '$1 " " $2 < d' file
它将昨天的时间戳设置为d
,并输出之前有时间戳的记录。