Se sua data / hora foi estruturada em aaa-mm-dd hh: mm: ss em vez de dia primeiro, você pode realizar comparações de sequência para filtrar as linhas após uma determinada data. Para reformatar o uso de dados
sed 's/\(..\)-\(..\)-\(..\)\(.*\)/--/' log > log.reformatted
Você pode usar o awk para imprimir linhas depois de uma determinada data e hora, concatenando-as juntas, por exemplo
awk '$1 " " $2 >= "17-06-22 06:40:00"' log.reformatted
O seu uso da data para obter o tempo há 30 minutos é bom - basta alterá-lo para o formato ano-mês-dia. Você não precisa da ação print $ 0, pois isso está implícito se nenhuma ação for especificada.
Note que suponho que "grepping" signifique usar ferramentas Unix para filtrar um subconjunto desejado dos dados disponíveis.
O erro original provavelmente é devido a um espaço entre a data e a hora, para que o argumento -v
receba apenas a data, enquanto a hora aparece como um argumento separado, confundindo o awk. Para resolver isso, use o formato %H
em vez de %k
(já que seu formato de registro é de dois dígitos) e remova o espaço entre o dia e a hora (como uma solução simplista para o problema). Então toda a solução se torna:
sed 's/\(..\)-\(..\)-\(..\)\(.*\)/--/' log |
awk -v date=$(date -d "30 minutes ago" +"%y-%m-%d%H:%M:%S") '$1$2 >= date'