Com o awk, é algo como:
$ var=$(date +"%b-%d-%Y-%I:%M:%S %p" | awk -F[-:] '{print $4}') && echo $var
04
$ var=$(date +"%b-%d-%Y-%I:%M:%S %p" | awk -F[-:] '{print $4 - 1}') && echo $var
3
Estou fazendo um script usando o BASH que consulta o timestamp de um arquivo (~ / logs / Server_Info.log). Especificamente, quero extrair o dígito da hora do registro de data e hora e gravá-lo em uma variável.
Este é o formato que usei para o timestamp:
date +"%b-%d-%Y-%I:%M:%S %p"
E usei este script para extrair os dados:
#!/bin/bash
LAST_HOUR="$(( $(date +%I) - 1 ))"
SEARCH_STRING=$(date +"%b-%d-%Y-${LAST_HOUR}:")
timeval=$(grep "${SEARCH_STRING}" ~/logs/Server_Info.log)
echo "$timeval"
exit 0
No entanto, sempre que executo esse script, obtenho duas respostas:
Saída em branco
-ou -
04
que estava completamente errado, porque meu timestamp é
Mar-24-2017-05:07:00 PM
Com o awk, é algo como:
$ var=$(date +"%b-%d-%Y-%I:%M:%S %p" | awk -F[-:] '{print $4}') && echo $var
04
$ var=$(date +"%b-%d-%Y-%I:%M:%S %p" | awk -F[-:] '{print $4 - 1}') && echo $var
3
O arquivo de registro contém o formato de data no formato 2017-03-15T08: 00: 23.698411Z. Se este calendário é em UTC é 2017-03-15T08: 00: 23.698411Z (a hora e a data são 08:00:23 e 2017-03-15) e será necessário convertê-lo no IST. Use o comando abaixo para a última hora
date -d '2017-03-15T08:00:23.698411Z last hours' -u +%s
1489561223
date -d @1489561223 +"%Y/%m/%d-%H:%M:%S"
2017/03 / 15-07: 00: 23
quer voltar 2 horas atrás e usar "2 horas atrás" em vez de "últimas horas".
Nota: - Estou executando o comando acima no servidor linux e o tempo do meu servidor linux está em UTC.Se você deseja executar o comando acima no servidor linux IST, você deve adicionar mais 5 horas e 30 minutos (por exemplo: - " Há 6 horas e 30 minutos "em vez de" últimas horas ").
espero que isso ajude muito, obrigado
Tags bash grep shell timestamps