Isso pode ser feito com a substituição de uma string simples, como abaixo, usando awk
, mas esteja ciente de que esse método provavelmente não é muito confiável se o formato mudar um pouco ou os dados de entrada não forem válidos.
awk -F, '/,/{printf "%s, %s, %s %02d:%02d, %s %02d:%02d\n",$1,$2,$1,int($3/100),$3%100,$1,int($4/100),$4%100}' YOUR_FILE.CSV
Ou com o código awk
formatado para melhor legibilidade:
/,/ {
printf "%s, %s, %s %02d:%02d, %s %02d:%02d\n",
$1, $2,
$1, int($3 / 100), $3 % 100,
$1, int($4 / 100), $4 % 100
}
Em inglês, isso é executado em cada linha que contém uma vírgula (para evitar o processamento de linhas vazias) e apenas imprime os respectivos valores de coluna (a entrada é separada por vírgula devido a -F,
) com o formato especificado:
- 1ª coluna (data), vírgula, 2a coluna (desc), vírgula,
- 1ª coluna (data), 3ª coluna valor / 100 (hora da data e hora1), dois pontos, 3ª coluna com valor módulo 100 (minutos da data e hora1), vírgula
- 1a coluna (data), 4º valor da coluna / 100 (hora do registro de data e hora2), dois pontos, quarto valor da coluna módulo 100 (minutos de registro de data e hora2)
O resultado nos seus dados de entrada em questão seria
2016-01-01, AAA, 2016-01-01 03:30, 2016-01-01 14:30
2016-01-02, ABA, 2016-01-02 01:30, 2016-01-02 09:30