awk '{ s = sprintf("%06d", $2); d = substr(s,1,2); m = substr(s,3,2); y = "20" substr(s,5,2); printf("%s%s%s.%s.%s%s%s%s", $1, OFS, m, d, y, OFS, $3, ORS) }' file.in
89 07.15.2016 -50,00
101 08.17.2016 -50,00
123 10.14.2016 -100,00
142 12.09.2016 -100,00
19 02.14.2017 -100,00
38 03.23.2017 -50,00
50 04.20.2017 -50,00
65 05.26.2017 -50,00
77 06.19.2017 -50,00
95 07.20.2017 -50,00
106 08.15.2017 -50,00
120 09.15.2017 -50,00
164 11.17.2017 -100,00
10 01.15.2018 -100,00
O código awk
em uma forma mais agradável:
{
s = sprintf("%06d", $2)
d = substr(s,1,2)
m = substr(s,3,2)
y = "20" substr(s,5,2)
printf("%s%s%s.%s.%s%s%s%s", $1, OFS, m, d, y, OFS, $3, ORS)
}
s
é primeiro definido para a forma de seis dígitos preenchida com zero do segundo campo de entrada. d
, m
e y
(dia, mês e ano) são então extraídos dessa sequência e 20
é adicionado como um prefixo à parte do ano.
O printf
imprime o registro resultante. OFS
é o atual separador de campos de saída (geralmente um espaço), e ORS
é o separador de registros de saída (geralmente uma nova linha).
Para obter resultados separados por tabulações:
awk -vOFS='\t' '{ ...as above... }' file.in