Script Bash para converter a segunda coluna no arquivo csv do tempo Unix para data / hora legível

1

Meu arquivo de entrada é um .csv separado por vírgulas. Gostaria de converter as segundas colunas da hora do unix para um formato de data e hora legível como este ...

before   1502280000
after    8/10/17 08:00:00

Eu também gostaria de ignorar a primeira linha como se fossem cabeçalhos.

Estou rodando em um shell bash no Solaris 10

as duas primeiras linhas do meu csv se parecem com isso

HOST,DATE_TIME_CREATED,USER_ID,EVENT_CLASS
xxxx,1502286180,xxxx,xxxx
xxxx,1502280347,xxxx,xxxx

procurando por resultados de

HOST,DATE_TIME_CREATED,USER_ID,EVENT_CLASS
xxxx,Wed Aug  9 09:43:00 EDT 2017,xxxx,xxxx
xxxx,Wed Aug  9 08:05:47 EDT 2017,xxxx,xxxx
    
por Jeff C 11.08.2017 / 16:34

2 respostas

4

Recomendaria enfaticamente o formato de hora AAAA-mm-dd HH: MM: SS - esse formato não é ambíguo e é ordenado lexical e cronologicamente.

Você pode usar o perl para isso:

perl -MPOSIX=strftime -F, -ane '
    $F[1] = strftime("%F %T", localtime $F[1]) if $. > 1; 
    print join ",", @F
' file
    
por 11.08.2017 / 17:05
1

A abordagem awk :

awk -F, 'NR>1{printf"%s,",$1;
             system("printf \"$(date -d @"$2")\"");printf",%s,%s\n",$3,$4}
' infile.txt
HOST,DATE_TIME_CREATED,USER_ID,EVENT_CLASS
xxxx,Wed Aug  9 09:43:00 EDT 2017,xxxx,xxxx
xxxx,Wed Aug  9 08:05:47 EDT 2017,xxxx,xxxx
    
por 11.08.2017 / 18:47