Digamos que [2/9/17 13:30:35:552 EST]
seja o formato, portanto 17
é sempre de 2017
e as conversões de fuso horário não são um problema ( EST
é ignorado).
Digamos que este seja um registro de amostra:
$ cat test.log
[2/1/17 10:30:35:000 EST] a
[2/2/17 13:30:31:553 EST] bbb
[2/9/17 09:00:00:000 EST] ccc
[2/9/17 13:30:33:657 EST] ddd
Eu acho que você gostaria de algo assim:
$ ./calc.sh '2017-02-01 10:00:00' 2017-02-03
[2/1/17 10:30:35:000 EST] a
[2/2/17 13:30:31:553 EST] bbb
$ ./calc.sh '1 Feb 2017' now
[2/1/17 10:30:35:000 EST] a
[2/2/17 13:30:31:553 EST] bbb
[2/9/17 09:00:00:000 EST] ccc
[2/9/17 13:30:33:657 EST] ddd
$ ./calc.sh '5 Feb 2017' now
[2/9/17 09:00:00:000 EST] ccc
[2/9/17 13:30:33:657 EST] ddd
Esta é a minha solução (ampliada com muitas variáveis para maior clareza):
$ cat calc.sh
#!/bin/bash
awk -v d1="$(date +%s --date="$1")" -v d2="$(date +%s --date="$2")" '
{
tDate = substr($1, 2)
split(tDate, dToken, "/")
month = dToken[1]
day = dToken[2]
year = "20"dToken[3]
tTime = $2
tTZ = substr($3, 1, length($3) - 1)
split(tTime, tToken, ":")
hh = tToken[1]
mm = tToken[2]
ss = tToken[3]
ts = mktime(year" "month" "day" "hh" "mm" "ss)
# maybe >= and <= would be better
if ((ts > d1) && (ts < d2)) {
print
}
}
' test.log