Converter coluna usando data e anexar ao arquivo csv

0

Eu tenho um CSV onde a primeira coluna tem uma string que representa datetime. Eu gostaria de adicionar uma coluna extra com esse datetime convertido em epoch.
Eu tentei o seguinte:

awk -F "," 'BEGIN{ OFS="," } {$14=$(date -jf "%m/%d/%Y %H:%M:%S %p" $1 "+%s"); print}’ mycsv.csv > test  

Eu recebo:

awk: illegal field $(0%m/%d/%Y %H:%M:%S %p"1/30/2017 11:14:55 AM"+%s), name "(null)"
 input record number 1, file mycsv.csv
 source line number 1  

Eu sei que a conversão de data para o campo funciona, por isso estou fazendo algo errado com a sintaxe.
Como posso fazer o que eu quero?

    
por Jim 01.02.2017 / 12:07

2 respostas

2

Eu tenho o GNU date e, portanto, as opções de linha de comando são diferentes para mim. Mas seu problema parece ser a sintaxe do awk: Você não pode usar a construção do sub-processo shell $(...) dentro de scripts awk. Você precisa da função system() , que recebe uma string. Portanto, você precisa construir um comando shell válido em uma string awk que pode ser passada para o sistema dentro do script awk.

Algo parecido com isto:

awk -F "," 'BEGIN{ OFS="," } {$14=system("date -jf \"%m/%d/%Y %H:%M:%S %p\" \""$1"\" \"+%s\""); print}' mycsv.csv > test

ou para melhor readablility

awk -F "," '
  BEGIN{ OFS="," }
  {
    $14 = system("date -jf \"%m/%d/%Y %H:%M:%S %p\" \"" $1 "\" \"+%s\"");
    print
  }' \
  mycsv.csv > test
    
por 01.02.2017 / 12:46
0

Se você tem o GNU awk (que deve estar disponível no OSX via brew , eu acho), então você poderia usar o mktime e strftime em vez de confiar no sistema date .

Infelizmente, o formato de entrada não está no formato dataspec esperado por mktime , portanto, é necessário dividir e reorganizar a seqüência de tempo. Por exemplo, dado

$ cat file.csv 
09/23/2016 11:12:19 AM,field2,field3

então

gawk -F, '
  {
    split($1,a,/[/: ]/);
    ts = sprintf("%4d %02d %02d %2d %2d %2d", a[3], a[2], a[1], a[7] ~ /^[Pp]/ ? a[4]+12 : a[4], a[5], a[6]); 
    $0 = strftime("%s", mktime(ts)) FS $0
  } 1' file.csv
1510243939,09/23/2016 11:12:19 AM,field2,field3
    
por 01.02.2017 / 14:35