Ordem de data de formatação em csv usando awk

0

Eu tenho o arquivo csv com a seguinte estrutura de dados: [MM / DD / AAAA]

1111,2222,3333,4444,5555,6666,7777,11/27/2017 18:58:48,11/27/2017 19:07:57

Estou com o objetivo de alterar o formato da data para: [AAAA / MM / DD]

1111,2222,3333,4444,5555,6666,7777,2017/11/27 18:58:48,2017/11/27 19:07:57

Estou tentando realizar isso usando o awk, mas qualquer outra ferramenta que faça o trabalho também seria aceitável.

    
por GustavMahler 28.02.2018 / 16:57

3 respostas

1

Tente isto:

sed -E 's|([0-9]{2}/[0-9]{2})/([0-9]{4})|/|g' file

ou

perl -pe 's|(\d{2}/\d{2})/(\d{4})|$2/$1|g' file

Saída:

1111,2222,3333,4444,5555,6666,7777,2017/11/27 18:58:48,2017/11/27 19:07:57
    
por 28.02.2018 / 17:09
2

Awk solução:

awk -F',' 'function reformat_date(c){     # 'c' - column value as an argument
               y = substr(c, 7, 4);       # extract 'year' value
               sub(/\/[0-9]{4}/, "", c);  # remove 'year' value
               return y"/"c               # return rearranged 'YYYY/MM/DD' value
           }
           { $8 = reformat_date($8); $9 = reformat_date($9) }1' OFS=',' file.csv

Exemplo de saída:

1111,2222,3333,4444,5555,6666,7777,2017/11/27 18:58:48,2017/11/27 19:07:57
    
por 28.02.2018 / 17:12
1

Se seus dados não incluírem nenhum outro formato semelhante a data, você poderá usar sed na linha inteira para alterar as datas:

sed 's#\([0-9][0-9]\)/\([0-9][0-9]\)/\([0-9][0-9][0-9][0-9]\)#//#g'
    
por 28.02.2018 / 17:04