Alterando o formato de data exibido de um arquivo de texto

0

Este código

grep -i 'logged in' path-to-file | tail | awk '{ print $6,"logged in at",substr($2,1,8),"on",$1"."; }' | sed 's/"//g'

irá produzir

pseudônimo logado às 22:06:58 do dia 2017-12-22.

O que eu quero é produzir assim:

pseudônimo logado às 22:06:58 do dia 22 de dezembro de 2017.

    
por Joey 22.12.2017 / 22:45

1 resposta

2

O comando unix date pode imprimir datas no formato que você quiser. Usando o sinalizador --date , você pode imprimir uma data e hora diferentes da data e hora atuais. No entanto, para o comando date analisar a data, você deverá remover o on na sua data de entrada. Você pode usar o seguinte comando sed:

sed -r 's,\s+on\s+, ,g'

Combinado com o formato de saída desejado, você obtém:

date --date="$(echo '22:06:58 on 2017-12-22' | sed -r 's,\s+on\s+, ,g')" '+%r on %B %d, %Y'

Agora, você só tem que combinar isso com seu comando awk, o que pode ser feito facilmente, supondo que você sempre tenha o mesmo formato "nome de usuário logado na data" . Note que você pode ter o on não impresso a partir de awk , então a chamada sed não é mais necessária:

while read line
do
    echo $line | awk '{print $1" "$2" "$3" "$4" "}' | tr -d '\n'
    date --date="$(echo $line | awk '{print $5" "$7}' | tr -d '.')" '+%r on %B %d, %Y'
done

Para o exemplo que você deu, isso é impresso (com locale en-NZ ):

nickname logged in at 10:06:58 PM on December 22, 2017

    
por 22.12.2017 / 23:00