У меня есть файл с несколькими структурами данных, например:
eventTimestamp: 2010-03-23T07:56:19.166
result: Allowed
protocol: SMS
payload: RCOMM_SMS
eventTimestamp: 2010-03-23T07:56:19.167
result: Allowed
protocol: SMS
payload: RCOMM_SMS
eventTimestamp: 2010-03-23T07:56:19.186
result: Allowed
protocol: SMS
payload: SMS-MO-FSM
eventTimestamp: 2010-03-23T07:56:19.197
result: Allowed
protocol: SMS
payload: COPS
eventTimestamp: 2010-03-23T07:56:29.519
result: Blocked
protocol: SMS
payload: COPS
type: URL_IWF
result: Blocked
Я хочу найти все события, которые являются полезной нагрузкой: SMS-MO-FSM или полезной нагрузкой: SMS-MO-FSM-ИНФО, произошедшее между 2010-03-23 12:56:47 и 2010-03-23 13:56:47.Запрашивая этот файл до сих пор, я использовал awk следующим образом:
cat checkThis.txt |
awk 'BEGIN{FS="\n"; RS=""; OFS=";"; ORS="\n"}
$1~/eventTimestamp: 2010-03-23T14\:16\:35/ && $4~/SMS-MO-FSM-INFO|SMS-MO-FSM$/ {$1=$1 ""; print $0}'
, что даст мне все события, которые произошли во втором из 14:16:35 в 2010-03-23.Однако я пытаюсь придумать, как я могу поместить диапазон дат в свой запрос.Я мог бы использовать следующее, чтобы поместить даты в эпоху, но как я могу использовать следующее в моем awk, чтобы проверить, находится ли дата между необходимыми временами:
python -c "import time; ENGINE_TIME_FORMAT='%Y-%m-%dT%H:%M:%S'; print int(time.mktime(time.strptime('2010-03-23T12:52:52', ENGINE_TIME_FORMAT)))"
Я знаю, что это можно сделать в Python, ноДля этого я написал парсер на Python и хочу использовать этот метод в качестве альтернативного средства проверки, поэтому я хочу использовать awk, если это вообще возможно.
Я взял это немного дальше и создал скрипт Python для преобразования времени:
#!/usr/local/bin/python
import time, sys
ENGINE_TIME_FORMAT='%Y-%m-%dT%H:%M:%S'
testTime = sys.argv[1]
try:
print int(time.mktime(time.strptime(testTime, ENGINE_TIME_FORMAT)))
except:
print "Time to convert %s" % testTime
raise
Затем я попытался использовать getline, чтобы присвоить преобразование переменной для сравнения:
cat checkThis.txt| awk 'BEGIN {FS="\n"; RS=""; OFS=";"; ORS="\n"; "./firstDate '2010-03-23T12:56:47'" | getline start_time; close("firstDate"); "./firstDate '2010-03-23T13:56:47'" | getline end_time; close("firstDate");} ("./firstDate $1" | getline) > start_time {$1=$1 ""; print $0}'
Traceback (most recent call last):
File "./firstDate", line 4, in <module>
testTime = sys.argv[1]
IndexError: list index out of range
Getline работает в BEGIN, и я проверил его в окончательном виде, но якажется, есть проблемы в части сравнения сценария.