Aide sur un traitement fichier sur Aix

leloup -  
Char Snipeur Messages postés 9813 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



A voir également:

19 réponses

bob031 Messages postés 8158 Date d'inscription   Statut Membre Dernière intervention   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
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
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
$ 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
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
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
bob031 Messages postés 8158 Date d'inscription   Statut Membre Dernière intervention   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
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
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Change les "\n" par des "\r" ;-\
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
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
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
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Même topo que la dernière fois alors, merci de mettre le fichier sur "Cijoint" ;-\
0
leloup
 
Merci Zipe31,

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

Cordialement
Leloup
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
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
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
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
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
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
T'as essayé avec gawk ou nawk ?
0
leloup
 
Non, ils ne sont pas installé sur mon Aix

Amicalement
leloup
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
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
leloup
 
C'est bien un fichier créé sous aix.

Ce n'est a rien y comprendre

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

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


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

Et la conversion de fichiers t'as essayé ou pas ?
0
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
bob031 Messages postés 8158 Date d'inscription   Statut Membre Dernière intervention   473
 
Bonjour,

J'essaierai de voir au boulot sur une AIX pourquoi cela ne le fait pas !
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Non car Dos2unix n'est pas installé sous l'aix
Et en convertissant avec "sed" (Conversion retours chariots DOS (CRLF) / UNIX (LF)) ?
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
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
bob031 Messages postés 8158 Date d'inscription   Statut Membre Dernière intervention   473
 
ModeJokeON>

On parle pas de bagnole conG, hein conG ?

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

<ModeJokeOFF>
0
leloup
 
Merci bobo

Amicalement
leloup
0
leloup
 
Bonjour Zipe31,

le fait de convertir ne change malheureusement rien.

Amicalement
leloup
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
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
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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
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