0

I am having a file like this:

Antwerpen;stad;Antwerpen;204,51;483505;Antwerpen;Berendrecht-Zandvliet-Lillo;Deurne;Borgerhout;Merksem;Ekeren;Berchem;Hoboken;Wilrijk
Gent;stad;Oost-Vlaanderen;156,18;243366;Gent;Mariakerke;Drongen;Wondelgem;Sint-Amandsberg;Oostakker;Desteldonk;Mendonk;Sint-Kruis-Winkel;Gentbrugge;Ledeberg;Afsnee;Sint-Denijs-Westrem;Zwijnaarde
Brugge;stad;West-Vlaanderen;138,40;116741;Brugge;Koolkerke;Sint-Andries;Sint-Michiels;Assebroek;Sint-Kruis;Dudzele;Lissewege

What I am trying to achieve is after a number followed by ";" followed by text:

(example: 483505;Antwerpen)

I would like to replace every ";" with a ", ".

The result should look like this:

Antwerpen;stad;Antwerpen;204,51;483505;Antwerpen, Berendrecht-Zandvliet-Lillo, Deurne, Borgerhout, Merksem, Ekeren, Berchem, Hoboken, Wilrijk
Gent;stad;Oost-Vlaanderen;156,18;243366;Gent, Mariakerke, Drongen, Wondelgem, Sint-Amandsberg, Oostakker, Desteldonk, Mendonk, Sint-Kruis-Winkel, Gentbrugge, Ledeberg, Afsnee, Sint-Denijs-Westrem, Zwijnaarde
Brugge;stad;West-Vlaanderen;138,40;116741;Brugge, Koolkerke, Sint-Andries, Sint-Michiels, Assebroek, Sint-Kruis, Dudzele, Lissewege

How can I achieve this using sed?

Joey
  • 144
  • 3
  • 17
  • 1
    What have you tried so far? What were the results? After reading the documentation, were there some specific things that were unclear? – larsks Aug 07 '16 at 13:09
  • I tried using :%s/\([0-9];\)\(.*\)/\1 echo \2 | sed "s/;/, /g"' result errors things did not work out. I am using :%s because it is in vim – Joey Aug 07 '16 at 13:15
  • 1
    If you want a Vim solution than perhaps you should tag your question accordingly, or ask on [vi.se]? With Vim: `:%s/\d;\zs.*/\=substitute(submatch(0), ';', ',', 'g')/g` – Sato Katsura Aug 07 '16 at 13:51
  • thanks alot this one really helped me out I can't vote u as the correct answer because it is a comment but thanks alot – Joey Aug 07 '16 at 14:07

1 Answers1

0

Just use awk:

$ awk 'match($0,/[0-9];[[:alpha:]](.*)/,a) { gsub(/;/,", ",a[1]); $0 = substr($0,1,RSTART+2) a[1] } 1' file
Antwerpen;stad;Antwerpen;204,51;483505;Antwerpen, Berendrecht-Zandvliet-Lillo, Deurne, Borgerhout, Merksem, Ekeren, Berchem, Hoboken, Wilrijk
Gent;stad;Oost-Vlaanderen;156,18;243366;Gent, Mariakerke, Drongen, Wondelgem, Sint-Amandsberg, Oostakker, Desteldonk, Mendonk, Sint-Kruis-Winkel, Gentbrugge, Ledeberg, Afsnee, Sint-Denijs-Westrem, Zwijnaarde
Brugge;stad;West-Vlaanderen;138,40;116741;Brugge, Koolkerke, Sint-Andries, Sint-Michiels, Assebroek, Sint-Kruis, Dudzele, Lissewege

The above uses GNU awk for the 3rd arg to match().

Ed Morton
  • 157,421
  • 15
  • 62
  • 152