Acabei de colocar a minha solução com sed
, mesmo que seja pedida especialmente para o AWK, acho esta solução mais compacta e direta:
GNU Sed (testado no CentOS):
sed -n '1!p' addresses.csv | sed -r 's!^([0-9]*(\sbis|\ster)?),?(.*)$!,!g;s!(.*)([^,])(,[0-9]*)$!,!g'
OS-X / BSD Sed
sed -n '1!p' addresses.csv | sed -E 's!^([0-9]*( bis| ter)?),?(.*)$!,!g;s!(.*)([^,])(,[0-9]*)$!,!g'
O primeiro comando sed é pegar todas as linhas, exceto a primeira (cabeçalho).
Para o segundo sed
, uso substituições:
^ : Starting text.
[0-9]* : all numbers (0, 1, ... 99, 999, 99999999 and so on)
( bis| ter)? : optionally followed by " bis" or " ter" (notice the space before); group 2
,? : optionally followed by a comma
(.*)$ : the rest of the string until the end ($) (group 3)
!, : replaced by first group (number + extension) - comma - third group
Observe que o segundo grupo é o parêntese para 'bis' e 'ter', e o primeiro grupo é esse ([0-9]*( bis| ter){0,1})
A segunda substituição é normalizar as vírgulas (se não terminar por ,,\d
, adicionamos uma vírgula extra.