Usando awk
com ajuda de date
:
awk -F '[[\]]' '{cmd="date -d \""$2"\" \"+%F %T\""; cmd | getline out; print out $3}'
-
-F '[[\]]'
define o delimitador de campo como[
ou]
, portanto, a data estaria no campo 2 e o restante no campo 3 -
A variável
cmd
contém o comandodate
para converter o segundo campo no formato desejado,getline
executa o comandodate
externo e a saída é salva na variávelout
-
Finalmente, o conteúdo da variável
out
e o terceiro campo são impressos
Exemplo:
% cat file.txt
[Sat Sep 10 06:31:41 2016]!Node2!Node1!Node3
[Sun Sep 11 23:31:41 2016]!Node2!Node1!Node3
% awk -F '[[\]]' '{cmd="date -d \""$2"\" \"+%F %T\""; cmd | getline out; print out $3}' file.txt
2016-09-10 06:31:41!Node2!Node1!Node3
2016-09-11 23:31:41!Node2!Node1!Node3