Sequence par deux du fichier

Résolu
Bonjour,

je veux avoir un script shell qui met la sequence des lignes de cette maniere:
fich1:
000000000000000000000000CH5010000000000000000000 201000
000000000000000000000000CA50000000000000000000 201000001
000000000000000000000000CH5001000000000000000000 201000
000000000000000000000000CA50000000000000000000 201000001
000000000000000000000000CH5003000000000000000000 201000
000000000000000000000000CA50000000000000000000 201000001
000000000000000000000000CH5003000000000000000000 201000
000000000000000000000000CA50000000000000000000 201000001
000000000000000000000000CH5003000000000000000000 201000
000000000000000000000000CA50000000000000000000 201000001
...........
...........
je veux que les 24 premiere ligne soit numeroter sequenciellement deux a deux:
fich2:

000000000000000000000001CH5010000000000000000000 201000
000000000000000000000001CA50000000000000000000 201000001
000000000000000000000002CH5001000000000000000000 201000
000000000000000000000002CA50000000000000000000 201000001
000000000000000000000003CH5003000000000000000000 201000
000000000000000000000003CA50000000000000000000 201000001
000000000000000000000004CH5003000000000000000000 201000
000000000000000000000004CA50000000000000000000 201000001
000000000000000000000005CH5003000000000000000000 201000
000000000000000000000005CA50000000000000000000 201000001
...........
...........

4 réponses

  1. Modérateur
    Bonjour,

    S'il vous plaît, merci, c'est trop demander ???

    Je veux => Je voudrai, j'aimerai, etc.

    A lire...

    Merci.
    0
    1. Bonjour,

      Avec awk:

      awk '{i=i+(NR%2?1:0);print substr($0,1,24) i substr($0,25)}' fichier
      0
      1. Bonjour,

        Ca marche mais il y a un decadrage a partir de la 18em ligne,
        je rappele que les 24 premieres caracteres sont reservées pour la sequence.

        voir ci-dessous
        000000000000000000000008CA50000000000000000000 2010000016DDA 01
        000000000000000000000009CH5001000000000000000000 2010000016 0
        000000000000000000000009CA50000000000000000000 2010000016DDA 01
        0000000000000000000000010CH5009000000000000000000 2010000016
        0000000000000000000000010CA50000000000000000000 2010000016DDA 0
        0000000000000000000000011CH5010000000000000000000 2010000016
        0000000000000000000000011CA50000000000000000000 2010000016DDA 0
        0000000000000000000000012CH5007000000000000000000 2010000016
        0000000000000000000000012CA50000000000000000000 2010000016DDA 0
        0000000000000000000000013CH5008000000000000000000 2010000016
        0000000000000000000000013CA50000000000000000000 2010000016DDA 1
        0000000000000000000000014CH5001000000000000000000 2010000016
        0000000000000000000000014CA50000000000000000000 2010000016DDA 0
        0
    2. Contributeur
      hello
      %02d pour moins de 198 lignes, pour plus mettre %03d ou plus
      gawk 'BEGIN{FS=OFS=""};{$24=$24 sprintf("%02d", i+=and(NR,1)) ; print}' fichier
      0
      1. ca ne marche pas, je rappelle que je suis sous windows et j'ai installe le mks.
        est que la commande gawk peux fonctionner?
        0
      2. Modérateur
        Fais un effort en convertissant tes fichiers ! Voir liens !
        0
      3. Joli le coup de l'opérateur binaire!
        0
      4. Modérateur
        dubcek c'est notre maitre Yoda du awk ;-))
        0
    3. Contributeur
      essaye
      GNU AWK. MKS Toolkit for System Administrators and all higher products feature the GNU AWK utility (gawk). GNU AWK is an alternate version of the awk pattern matching and scripting language used predominantly for searching through and manipulating text-based files and data. gawk has been included to provide compatibility with other GNU tools and ported scripts from a GNU environment.
      sinon tu prends le code de ripat et tu changes i par sprintf("%02d", i)
      0
      1. Merci a tous ca marcher.
        ca fonctionnée avec sprintf("%02d", i)
        Bonne journée a tous.
        0