Aide sur un traitement fichier sur Aix

leloup -  
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour, à tous,

J'ai un fichier qui est monté comme cela :
MAGASIN :101  R'ception des Op'rations au 
                     bobon.                     tv                     Heures
                Emis          Recus        Emis         Recus        Emis         Recus
Enregistrements  0             0            0            0            0            0
Compteur 1       0             0            0            0            0            0
Compteur 2       0             0            0            0            0            0
Encaissement     0             0
Decaissement     0             0


MAGASIN :102  R'ception des Op'rations au 171110
                     bobon.                     tv                     Heures
                Emis          Recus        Emis         Recus        Emis         Recus
Enregistrements  0             0            1            1            0            0
Compteur 1       0             0            420902       510902       0            0
Compteur 2       0             0            7            7            0            0
Encaissement     0             0
Decaissement     0             0
etc.....


Je voudrais pouvoir faire un test sur les champs et si ceux ci ne sont pas égaux envoyer le bloc dans un autre fichier.

En gros, la je recupererais dans un autre fichier :
MAGASIN :102  R'ception des Op'rations au 171110
                     bobon.                     tv                     Heures
                Emis          Recus        Emis         Recus        Emis         Recus
Enregistrements  0             0            1            1            0            0
Compteur 1       0             0            420902       510902       0            0
Compteur 2       0             0            7            7            0            0
Encaissement     0             0
Decaissement     0             0


Est ce possible et surtout comment s'y prendre ?

Merci d'avance pour votre aide.

Cordialement à tous
Leloup

19 réponses

  1. bob031 Messages postés 8228 Statut Membre 473
     
    Bonjour,

    Mais oui c'est possible !

    Sous Unix, tout est possible .... ou presque ^^

    la commande diff devrait peut-être t'aider.

    pour plus de précisions :

    man diff


    un penguin sur la banquise !
    0
  2. leloup
     
    Bonjour et merci de ton intérêt,

    Je sais bien que sous unix/linux tout est possible ou presque d'ou notre choix lol

    Par contre, diff permet de comparer 2 fichiers mais non un seul fichier me semble t'il.

    Merci encore pour votre aide.

    Cordialement à tous
    Leloup
    0
  3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    Il nous faudrait davantage d'explications...

    Si j'ai bien compris tu veux comparer chaque bloc commençant par "MAGASIN :xxx" (et se finissant par une ligne vide comme séparateur de bloc ?) au 1er bloc et envoyer le bloc dans un fichier si les champs ne concordent pas ?

    Un exemple plus concret serait de mise afin de lever toute ambiguïté ;-\
    0
  4. leloup
     
    C'est tout à fait cela.

    Ben l'exemple est dans mon premier message.

    J'ai effectivement plusieurs bloc commencant par magXXX et se terminant par une ligne vide.

    A l'interieur du bloc, j'ai plusieurs champs (par deux) et si ils ne concordent pas, je souhaiterais que le boc soit redirigé vers un autre fichier.

    Le fichier serait donc comme cela :
    MAGASIN :101  R'ception des Op'rations au 
                         bobon.                     Truc                     Heures
                    Emis          Recus        Emis         Recus        Emis         Recus
    Enregistrements  0             0            0            0            0            0
    Compteur 1       0             0            0            0            0            0
    Compteur 2       0             0            0            0            0            0
    Encaissement     0             0
    Decaissement     0             0
    
    
    MAGASIN :102  R'ception des Op'rations au 171110
                         bobon.                     Truc                     Heures
                    Emis          Recus        Emis         Recus        Emis         Recus
    Enregistrements  0             0            1            1            0            0
    Compteur 1       0             0            420902       420902       0            0
    Compteur 2       0             0            7            7            0            0
    Encaissement     0             0
    Decaissement     0             0
    
    MAGASIN :103  R'ception des Op'rations au 171110
                         bobon.                     Truc                     Heures
                    Emis          Recus        Emis         Recus        Emis         Recus
    Enregistrements  531           531          89           89           0            0
    Compteur 1       836.54        836.5        6902898      6302262      0            0
    Compteur 2       2134992       2134992      1583.97      1520.17      0            0
    Encaissement     2038.43       2038.43
    Decaissement     2038.43       2038.43
    
    MAGASIN :104  R'ception des Op'rations au 171110
                         bobon.                     Truc                     Heures
                    Emis          Recus        Emis         Recus        Emis         Recus
    Enregistrements  10            10           145          145          0            0
    Compteur 1       294           294          9248565      9248565      0            0
    Compteur 2       9047          9047         1727.74      1727.74      0            0
    Encaissement     0             0
    Decaissement     0             0
    
    MAGASIN :239  R'ception des Op'rations au 171110
                         bobon.                     Truc                     Heures
                    Emis          Recus        Emis         Recus        Emis         Recus
    Enregistrements  250           250          23           23           0            0
    Compteur 1       168.06        168.04       3663671      3363292      0            0
    Compteur 2       3688580       3688580      393.32       373.24       0            0
    Encaissement     1234.7        1234.7
    Decaissement     1234.7        1234.7
    
    


    Et je voudrais récuperer :
    MAGASIN :103  R'ception des Op'rations au 171110
                         bobon.                     Truc                     Heures
                    Emis          Recus        Emis         Recus        Emis         Recus
    Enregistrements  531           531          89           89           0            0
    Compteur 1       836.54        836.5        6902898      6302262      0            0
    Compteur 2       2134992       2134992      1583.97      1520.17      0            0
    Encaissement     2038.43       2038.43
    Decaissement     2038.43       2038.43
    
    MAGASIN :239  R'ception des Op'rations au 171110
                         bobon.                     Truc                     Heures
                    Emis          Recus        Emis         Recus        Emis         Recus
    Enregistrements  250           250          23           23           0            0
    Compteur 1       168.06        168.04       3663671      3363292      0            0
    Compteur 2       3688580       3688580      393.32       373.24       0            0
    Encaissement     1234.7        1234.7
    Decaissement     1234.7        1234.7


    Merci pour votre aide

    Cordialement
    Leloup
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    $ cat fich
    MAGASIN :101  R'ception des Op'rations au 
                         bobon.                     Truc                     Heures
                    Emis          Recus        Emis         Recus        Emis         Recus
    Enregistrements  0             0            0            0            0            0   
    Compteur 1       0             0            0            0            0            0   
    Compteur 2       0             0            0            0            0            0   
    Encaissement     0             0                                                       
    Decaissement     0             0                                                       
    
    
    MAGASIN :102  R'ception des Op'rations au 171110
                         bobon.                     Truc                     Heures
                    Emis          Recus        Emis         Recus        Emis         Recus
    Enregistrements  0             0            1            1            0            0   
    Compteur 1       0             0            420902       420902       0            0   
    Compteur 2       0             0            7            7            0            0   
    Encaissement     0             0                                                       
    Decaissement     0             0                                                       
    
    MAGASIN :103  R'ception des Op'rations au 171110
                         bobon.                     Truc                     Heures
                    Emis          Recus        Emis         Recus        Emis         Recus
    Enregistrements  531           531          89           89           0            0   
    Compteur 1       836.54        836.5        6902898      6302262      0            0   
    Compteur 2       2134992       2134992      1583.97      1520.17      0            0   
    Encaissement     2038.43       2038.43                                                 
    Decaissement     2038.43       2038.43                                                 
    
    MAGASIN :104  R'ception des Op'rations au 171110
                         bobon.                     Truc                     Heures
                    Emis          Recus        Emis         Recus        Emis         Recus
    Enregistrements  10            10           145          145          0            0   
    Compteur 1       294           294          9248565      9248565      0            0   
    Compteur 2       9047          9047         1727.74      1727.74      0            0   
    Encaissement     0             0                                                       
    Decaissement     0             0                                                       
    
    MAGASIN :239  R'ception des Op'rations au 171110
                         bobon.                     Truc                     Heures
                    Emis          Recus        Emis         Recus        Emis         Recus
    Enregistrements  250           250          23           23           0            0
    Compteur 1       168.06        168.04       3663671      3363292      0            0
    Compteur 2       3688580       3688580      393.32       373.24       0            0
    Encaissement     1234.7        1234.7
    Decaissement     1234.7        1234.7
    
    $ awk  'BEGIN { RS="\n\n+"; FS="\n" }{ split($5,tb," "); if(tb[5] != tb[6]) {printf $0"\n\n"} }' fich
    MAGASIN :103  R'ception des Op'rations au 171110
                         bobon.                     Truc                     Heures
                    Emis          Recus        Emis         Recus        Emis         Recus
    Enregistrements  531           531          89           89           0            0
    Compteur 1       836.54        836.5        6902898      6302262      0            0
    Compteur 2       2134992       2134992      1583.97      1520.17      0            0
    Encaissement     2038.43       2038.43
    Decaissement     2038.43       2038.43
    
    MAGASIN :239  R'ception des Op'rations au 171110
                         bobon.                     Truc                     Heures
                    Emis          Recus        Emis         Recus        Emis         Recus
    Enregistrements  250           250          23           23           0            0
    Compteur 1       168.06        168.04       3663671      3363292      0            0
    Compteur 2       3688580       3688580      393.32       373.24       0            0
    Encaissement     1234.7        1234.7
    Decaissement     1234.7        1234.7
    
    $

    ;-))
    0
  7. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    doublon : https://forums.commentcamarche.net/forum/affich-19883896-traitement-fichier-sous-ksh#p19887045 (à sa décharge, le problème tiens autant de la programmation que de Unix, la preuve réponse dans les deux)

    awk, je l'oublie toujours celle là.
    La vrai soumission c'est quand les esclaves s'inquiètent du cours du coton.
    Char Snipeur
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      A part que pour "grep" il avait déjà eu une réponse, et que les doublons ne sont pas tolérés principalement pour ne pas s'égarer et ne pas répéter 50 fois la même chose ;-((
      0
  8. bob031 Messages postés 8228 Statut Membre 473
     
    Ouais ! Bon, ça va ! Je pensais qu'il s'agissait de 2 fichiers différents !

    Par contre, diff permet de comparer 2 fichiers mais non un seul fichier me semble t'il.

    exact !

    ^^
    0
  9. leloup
     
    Merci encore à tous pour votre aide.

    Désolé mais la commande
    awk  'BEGIN { RS="\n\n+"; FS="\n" }{ split($5,tb," "); if(tb[5] != tb[6]) {printf $0"\n\n"} }' fich


    ne me renvoi rien.

    Cordialement
    Leloup
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Change les "\n" par des "\r" ;-\
      0
    2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      En fait modifie comme suit :

      awk  'BEGIN { RS="\r\n\r\n+"; FS="\r\n" }{ split($5,tb," "); if(tb[5] != tb[6]) {printf $0"\n\n"} }'
      0
  10. leloup
     
    Bonjour,

    Désolé, mais
    awk  'BEGIN { RS="\r\n\r\n+"; FS="\r\n" }{ split($5,tb," "); if(tb[5] != tb[6]) {printf $0"\n\n"} }' fich
    ne me renvoie rien non plus.

    Merci encore pour vos efforts et votre aide

    Cordialement
    Leloup
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Même topo que la dernière fois alors, merci de mettre le fichier sur "Cijoint" ;-\
      0
  11. leloup
     
    Merci Zipe31,

    Le lien est : http://www.cijoint.fr/cjlink.php?file=cj201011/cijoANWETP.txt

    Cordialement
    Leloup
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Ben chez moi ça marche sans problème ;-\

      $ grep -o -c 'MAGASIN' cijoANWETP.txt
      75
      
      $ awk  'BEGIN { RS="\r\n\r\n+"; FS="\r\n" }{ split($5,tb," "); if(tb[5] != tb[6]) {printf $0"\n\n"} }' cijoANWETP.txt | grep -o -c 'MAGASIN'
      44
      
      $ awk  'BEGIN { RS="\r\n\r\n+"; FS="\r\n" }{ split($5,tb," "); if(tb[5] != tb[6]) {printf $0"\n\n"} }' cijoANWETP.txt | egrep -o 'MAGASIN :[^ ]*'
      MAGASIN :102
      MAGASIN :104
      MAGASIN :108
      MAGASIN :109
      MAGASIN :110
      MAGASIN :111
      MAGASIN :113
      MAGASIN :114
      MAGASIN :115
      MAGASIN :117
      MAGASIN :121
      MAGASIN :124
      MAGASIN :129
      MAGASIN :132
      MAGASIN :133
      MAGASIN :134
      MAGASIN :137
      MAGASIN :138
      MAGASIN :140
      MAGASIN :144
      MAGASIN :145
      MAGASIN :149
      MAGASIN :150
      MAGASIN :151
      MAGASIN :152
      MAGASIN :159
      MAGASIN :167
      MAGASIN :169
      MAGASIN :173
      MAGASIN :179
      MAGASIN :184
      MAGASIN :197
      MAGASIN :239
      MAGASIN :261
      MAGASIN :275
      MAGASIN :336
      MAGASIN :4GA
      MAGASIN :4GD
      MAGASIN :4GH
      MAGASIN :4GI
      MAGASIN :4GK
      MAGASIN :4GM
      MAGASIN :4GN
      MAGASIN :4GS

      C'est les bons ?

      Essayes avec "gawk" ou "nawk" ;-\
      0
    2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Oups avec les nouvelles données, le champ à récupérer a changé ($6 et non plus $5) ;-((

      awk  'BEGIN { RS="\r\n\r\n+"; FS="\r\n" }{ split($6,tb," "); if(tb[5] != tb[6]) {printf $0"\n\n"} }' cijoANWETP.txt
      
      MAGASIN :239  R?ception des Op?rations au 171110
                           Appro.                     Cereales                     Heures
                      Emis          Recus        Emis         Recus        Emis         Recus
      Enregistrements  250           250          23           23           0            0
      Compteur 1       168.06        168.04       3663671      3363292      0            0
      Compteur 2       3688580       3688580      393.32       373.24       0            0
      Encaissement     1234.7        1234.7
      Decaissement     1234.7        1234.7
      
      
      MAGASIN :275  R?ception des Op?rations au 171110
                           Appro.                     Cereales                     Heures
                      Emis          Recus        Emis         Recus        Emis         Recus
      Enregistrements  531           531          89           89           0            0
      Compteur 1       836.54        836.5        6902898      6302262      0            0
      Compteur 2       2134992       2134992      1583.97      1520.17      0            0
      Encaissement     2038.43       2038.43
      Decaissement     2038.43       2038.43

      ;-))
      0
  12. leloup
     
    Désolé,

    la commande fonctionne a merveille sous linux, mais s'entête à ne rien renvoyé sous mon aix.

    Je suis perdu

    Cordialement
    Leloup
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      T'as essayé avec gawk ou nawk ?
      0
  13. leloup
     
    Non, ils ne sont pas installé sur mon Aix

    Amicalement
    leloup
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Ben là je ne peux plus rien pour toi ;-((

      C'est un fichier créé sous AIX ou importé d'un système Windows ?
      As-tu essayé de convertir le fichier au format Unix (dos2unix ou avec "sed") ?
      0
  14. leloup
     
    C'est bien un fichier créé sous aix.

    Ce n'est a rien y comprendre

    Amicalement
    leloup
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Que renvoie la commande :

      file fichier
      0
  15. leloup
     
    Ca renvoi :
    data or international language text


    Amicalement
    leloup
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      C'est pas très causant les système AIX ;-((

      Et la conversion de fichiers t'as essayé ou pas ?
      0
  16. leloup
     
    Non car Dos2unix n'est pas installé sous l'aix

    C'est quand meme incroyable que ca fonctionne a merveille sous linux et que ca ne renvoi strictement rien sous aix.

    Amicalement
    leloup
    0
    1. bob031 Messages postés 8228 Statut Membre 473
       
      Bonjour,

      J'essaierai de voir au boulot sur une AIX pourquoi cela ne le fait pas !
      0
    2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Non car Dos2unix n'est pas installé sous l'aix
      Et en convertissant avec "sed" (Conversion retours chariots DOS (CRLF) / UNIX (LF)) ?
      0
    3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Salut Bobby ;-))

      J'essaierai de voir au boulot sur une AIX pourquoi cela ne le fait pas !

      <ModeJokeON>
      On parle pas de bagnole conG, hein conG ? ;-DDD
      <ModeJokeOFF>
      0
    4. bob031 Messages postés 8228 Statut Membre 473
       
      ModeJokeON>

      On parle pas de bagnole conG, hein conG ?

      pourtant je bosse dans un grand garage très réputé conG .... ^^

      <ModeJokeOFF>
      0
  17. leloup
     
    Bonjour Zipe31,

    le fait de convertir ne change malheureusement rien.

    Amicalement
    leloup
    0
  18. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    Il est pénible ce système AIX, pourtant il est récent.
    Comme c'est un système assez peu répendu, difficile de trouver quelqu'un qui a le même et peu tester.
    Si awk ne fonctionne pas, il reste comme je te le disais l'utilisation des commandes "grep cut tail head wc".
    Ou alors, tu récupères un awk Linux que tu compiles toi même (à nommé GNUawk pour ne pas confondre).
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      On a bien un spécialiste (AIX, Solaris, etc.) ici en la personne de dubcek (maitre awk s'il en est de surcroit) mais ça fait un moment qu'on ne l'a pas vu ;-\

      Faudrait voir du côté de perl peut-être ( lami20j si tu passes par là...) ;-))
      0
    2. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      perl...
      open(fic,"<fichier");
      while( defined ($lect=<fic>) )
      {
          push @tot,"$lect\n";
      }
      close fic;
      @blocks=split /MAGASIN/,$tot;
      for ($n=0;$n<$#blocks;$n++)
      {
          @lignes=split /\n/,blocks[$n]:
          for ($m=2;$m<8;$m++)   #commence à 2 pour sauter premières lignes
          {
               @champs=split / +/,lignes[$m];
               if(champs[1] != champs[2] || champs[3] != champs[4]){/* fonction écrivant tout le bloc*/; last;}
          }
      }
      

      Bon, voilà, je ne suis pas un expert en perl, donc il faut surement débuguer pas mal, mais je pense que ça peut être une bonne base.
      0
  19. leloup
     
    Ok j'ai envoyé un petit mp plein de nouveaux espoir à Dubcek.

    Encore merci à tous pour votre soutien et votre aide.

    Amicalement
    leloup
    0