2016-12-22 4 views
-4

Я хотел бы создать bash сценарий, который сравнивает дату каждой строки в лог-файл в текущей даты и если разница составляет более 1 день, затем он печатает соответствующую строку в другой файл.Match дата шаблон из файла журнала, сравнить его с текущей датой и распечатать соответствующую строку

Можете ли вы поддержать?

Ниже приведен образец журнала:

2016-09-29 23:40:14 GST;2016-09-29 23:40:14 GST;faultManager:[email protected][email protected]@[email protected]@[email protected]|alarm-2632-3-698; 
2016-11-01 07:10:51 GST;2016-11-01 07:10:51 GST;faultManager:[email protected][email protected]@[email protected]@[email protected]|alarm-2632-3-698; 
2016-11-01 07:10:51 GST;2016-11-01 07:10:51 GST;faultManager:[email protected][email protected]@[email protected]@[email protected]|alarm-2632-3-698; 
2016-11-01 07:10:51 GST;2016-11-01 07:10:51 GST;faultManager:[email protected][email protected]@[email protected]@[email protected]|alarm-2632-3-698; 
2016-11-01 11:26:58 GST;2016-11-01 11:26:58 GST;faultManager:[email protected][email protected]@[email protected]@[email protected]|alarm-2632-3-698; 
2016-11-03 10:00:08 GST;2016-11-03 10:00:08 GST;faultManager:[email protected][email protected]@[email protected]@[email protected]|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

В файле журнала есть две даты. '2016-09-29 23:40:14 GST; 2016-09-29 23:40:14 GST;' Какая дата должна быть сопоставлена ​​с текущей датой, или оба они одинаковы? – AbhiNickz

+0

отредактировал вопрос и добавил код, который я сделал до сих пор, обе даты одинаковы, поэтому рассмотрим первый. –

+0

Проблема в том, что вы думаете о некоторых командах, например 'diff = \' $ currentDate - $ toDate \ ''. Это должно сообщать хотя бы об ошибке. Думаете ли вы, что эта команда получает разницу в днях с двух дат? – Jdamian

ответ

2

Вот один в AWK:

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

Он устанавливает вчерашним timestamp to d и выводит записи, имеющие перед ним временные метки.