Parsing , awk , perl , sed

Résolu
Bonjour tt le monde,
je veux dans un fichier, mettre des séparateurs ";" , par exemple, dans des positions définies de chaque ligne de mon fichier je me fous du langage : perl, awk.

genre : dans les position 5, 11, 22 , 35 et 50 de tt les ligne mettre mon sépararteur
fichier initial:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

fichier final:

aaaa;aaaaaa;aaaaaaaaaaa;aaaaaaaaaaaaa;aaaaaaaaaaaaaaa;aaaaaaaaaaaa
aaaa;aaaaaa;aaaaaaaaaaa;aaaaaaaaaaaaa;aaaaaaaaaaaaaaa;aaaaaaaaaaaa
aaaa;aaaaaa;aaaaaaaaaaa;aaaaaaaaaaaaa;aaaaaaaaaaaaaaa;aaaaaaaaaaaa

merci

8 réponses

  1. Pour les cinq premire ligne, elles commencent avec des vide qui n'ont pas été pris en charge par l'éditeur du forum.
    1. Voilà le corp du fichier.

      "F" marque la fin du fichier, je l'ai mise , car je n'ai pas arrivé à joindre le fichier..

      XXXXXXXXX 000 XXXXXX 02/27/2008 0000 02/27/2008 2359 XXXXXXXXX XXXXXXF
      XRXXXXXX 000 XXXXXX 02/27/2008 1840 02/27/2008 1845 XXXXXXXXX XXXXXXF
      XXXXXXXXX 000 XXXXXX 02/27/2008 2215 02/27/2008 2300 XXXXXXXXX XXXXXXF
      ZXXXXXXXXX 000 XXXXXXXX 02/28/2008 0800 02/28/2008 0900 XXXXXXXXX XXXXXXF
      ZXXXXXXXXX 000 XXXXXXXX 03/01/2008 1200 03/01/2008 1300 XXXXXXXXX XXXXXXF
      ZXXRXXXX 000 XXXXXXXX 02/27/2008 2030 02/27/2008 2330 02/27/2008 XXXXXXXXX XXXF
      XXXXXXXXXX 000 XXXXXXXX XXXXXXXXX XXXXXXXX XXXF
      XXXXXXXXXC 000 XXXXXXXX 02/27/2008 1800 02/27/2008 2100 02/27/2008 XXXXXXXXX XXXF
      XXXXXXXXXX 000 XXXXXXXXXX 000 XXXXXX XXXXXXXX XXXXXXF
      XXXXXXXXXX 000 XXXXXXXSXX 000 XXXXXX XXXXXXXX XXXXXXF
      XXXXXXXXXX 000 XXXXXXXSXX 000 XXXXXX XXXXXXXX XXXXXXF
      XXXXXXXXXX 000 XXXXXXXSXX 000 XXXXXX XXXXXXXX XXXXXXXF
      XXXXXXXXXX 000 XXXXXXXSXX 000 XXXXXX XXXXXXXX XXXXXXXF
      XXXXXXXXXX 000 XXXXXXXSXX 000 XXXXXX XXXXXXXX XXXXXXXF
      XXXXXXXXXX 000 XXXXXXXSXX 000 XXXXXX XXXXXXXX XXXXXXXF
      XXXXXXXXXX 000 XXXXXXXSXG 000 XXXXXX XXXXXXXX XXXXXXXF
      XXXXXXXXXX 000 XXXXXXXSXH 000 XXXXXX XXXXXXXX XXXXXXXF
      XXXXXXXXXX 000 XXXXXXXSXI 000 XXXXXX XXXXXXXX XXXXXXXF
      XXXXXXXXXX 000 XXXXXXXSXJ 000 XXXXXX XXXXXXXX XXXXXXXF
      XXXXXXXXXX 000 XXXXXXXXXX 000 XXXXXX XXXXXXXX XXXXXXXF
      XXXXXXXXXX 000 XXXXXXXSXL 000 XXXXXX XXXXXXXX XXXXXXXF
      XXXXXXXXX 000 FXXXXXXXXL 000 XXXXXX 03/01/2008 2305 03/02/2008 0305 XXXXXXXXX XXXXXXXF
      1. En faite , ça marche mais juste pour six 6 substitutio une fois plus les fichier file et file.back ne subissent aucune modif!!!
        j'ai 13 emplacement ou je dois mettre le séparateur!!!
        il s'agit d'un problème de perl ou koi exactement???

        Merci
        1. Modérateur
          Le séparateur est le ;
          voici chez moi
          ~/trash$ cat aaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          ~/trash$ perl -pi.bak -e 's/^(.{4})(.{7})(.{11})(.{13})(.{15})(.*)/$1;$2;$3;$4;$5;$6/' aaa
          ~/trash$ cat aaa
          aaaa;aaaaaaa;aaaaaaaaaaa;aaaaaaaaaaaaa;aaaaaaaaaaaaaaa;aaaaaaaaaaa
          aaaa;aaaaaaa;aaaaaaaaaaa;aaaaaaaaaaaaa;aaaaaaaaaaaaaaa;aaaaaaaaaaa
          aaaa;aaaaaaa;aaaaaaaaaaa;aaaaaaaaaaaaa;aaaaaaaaaaaaaaa;aaaaaaaaaaa
          ~/trash$ cat aaa.bak
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          ~/trash$

          1. Merci pour vos réponse;

            pour le sed ça marche, mais pour le perl le fichier en sortie et pareil que celui en entré!!!
            une question : dans la commande
            perl -pi.bak -e 's/^(.{4})(.{7})(.{11})(.{13})(.{15})(.*)/$1;$2;$3;$4;$5;$6/' fichier

            c'est qoui le séparateur ???
            1. Modérateur
              Salut,
              perl -pi.bak -e 's/^(.{4})(.{7})(.{11})(.{13})(.{15})(.*)/$1;$2;$3;$4;$5;$6/' fichier
              --

              lami20j
              1. Modérateur
                Salut,
                sed -e 's/.\{4\}/&;/;s/.\{11\}/&;/;s/.\{23\}/&;/;s/.\{37\}/&;/;s/.\{53\}/&;/'
                ;-))