Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/11/2010, 11h38   #1
Nouveau Membre du Club
 
Inscription : février 2009
Messages : 123
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 123
Points : 29
Points : 29
Par défaut Traitement d'un fichier

Bonjour, à tous,

J'ai un fichier qui est monté comme cela :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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 :

Code :
1
2
3
4
5
6
7
8
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.

Amicalement
Steph70
steph70 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2010, 11h50   #2
Membre Expert
 
Avatar de becket
 
Frédéric Brugmans
Informaticien multitâche
Inscription : février 2005
Messages : 661
Détails du profil
Informations personnelles :
Nom : Frédéric Brugmans

Informations professionnelles :
Activité : Informaticien multitâche

Informations forums :
Inscription : février 2005
Messages : 661
Points : 1 196
Points : 1 196
Tu compares des pommes et des poires ? MAGASIN :101 et MAGASIN: 102
Tu n'as pas d'heure sur MAGASIN: 102 alors que sur 101 oui
Tu as combien de bloc dans un fichier ? Ou commence et ou s'arrête un bloc ?
Si les blocs sont différents, tu le récupère dans un fichier : Un seul ? Lequel ? les deux
becket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2010, 12h01   #3
Nouveau Membre du Club
 
Inscription : février 2009
Messages : 123
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 123
Points : 29
Points : 29
Tout d'abord merci pour ton intérêt

Les blocs commencent à "MAGXXXX" et s'arrete à la ligne vide.

Exemple de bloc :
Code :
1
2
3
4
5
6
7
8
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
Le test se fait à l'interieur d'un bloc entre les colonnes emis et reçus sur chaque ligne

Si emis et reçus sont différents, je souhaiterais que le bloc en entier soit renvoyer dans un autre fichier pour une lecture plus simple et plus courte.

Si il y a plusieurs blocs comprenant des différences, ils sont renvoyés dans le même fichier.

Il y a environ un 50 aines de bloc dans le fichier.

Merci de ton aide
Amicalement
Steph70
steph70 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2010, 12h25   #4
Membre Expert
 
Avatar de becket
 
Frédéric Brugmans
Informaticien multitâche
Inscription : février 2005
Messages : 661
Détails du profil
Informations personnelles :
Nom : Frédéric Brugmans

Informations professionnelles :
Activité : Informaticien multitâche

Informations forums :
Inscription : février 2005
Messages : 661
Points : 1 196
Points : 1 196
Tu compares MAGASIN101 à quoi ? à d'autre MAGASIN101 ?
A tous les enregistrement ?
Les numéro Magasin se suivent ? ne se suivent pas ?
becket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2010, 12h39   #5
Nouveau Membre du Club
 
Inscription : février 2009
Messages : 123
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 123
Points : 29
Points : 29
Je compare l'interieur du bloc "MAGXXX" entre les émis et les reçus.

Par exemple dans le bloc "MAGASIN : 101" je verifie que les chiffres de la colonne "emis" soient equivalent aux chiffres de la colonne "reçus". Si ce n'est pas le cas, j'envoi tout le bloc dans un autre fichier et je passe au "MAGASIN : 102" et je lui attribue le même traitement, etc

Exemple :
Code :
1
2
3
4
5
6
7
8
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
Ici , l'emis et le recus de la ligne Compteur 2 ne sont equivalent, donc je prend tous le bloc et je l'envoi dans un autre fichier

Les numéros de magasin ne se suivent pas forcement

Amicalement
Steph70
steph70 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2010, 21h22   #6
Membre Expert
 
Avatar de becket
 
Frédéric Brugmans
Informaticien multitâche
Inscription : février 2005
Messages : 661
Détails du profil
Informations personnelles :
Nom : Frédéric Brugmans

Informations professionnelles :
Activité : Informaticien multitâche

Informations forums :
Inscription : février 2005
Messages : 661
Points : 1 196
Points : 1 196
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
{
        if ( $0 ~ /.*MAGASIN.*/ )
        {
                MAG=$0
                TOSAVE=0
                RECORD=" "
 
                for ( ; length($0) > 1  ; getline )
                {
                  RECORD=RECORD"\n"$0
                        if  ( (  ( $0 ~ /enregistrement/ ) || ( $0 ~ /compteur/ ) || ( $0 ~ /caissement/ )  ) &&  ( (  $2 != $3 ) || ( $4 != $5 ) || ( $6 != $7 ) ) )
 
 
                        {
 
                                TOSAVE=1
                        }
                }
                if ( TOSAVE == 1 )
                {
                        print RECORD
                }
        }
}
becket est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/11/2010, 08h52   #7
Nouveau Membre du Club
 
Inscription : février 2009
Messages : 123
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 123
Points : 29
Points : 29
Bonjour et merci encore pour ton aide.

Je n'ai pas tout compris au niveau du script.

Je viens de le tester et ca me donne ceci :

Code :
1
2
./test: line 8: Erreur de syntaxe près du symbole inattendu « ( »
./test: line 8: `                for ( ; length($0) > 1  ; getline )'
Amicalement
Steph70
steph70 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2010, 09h10   #8
Membre Expert
 
Avatar de becket
 
Frédéric Brugmans
Informaticien multitâche
Inscription : février 2005
Messages : 661
Détails du profil
Informations personnelles :
Nom : Frédéric Brugmans

Informations professionnelles :
Activité : Informaticien multitâche

Informations forums :
Inscription : février 2005
Messages : 661
Points : 1 196
Points : 1 196
Peut être parce qu'il faut utiliser un fichier script awk et pas un script shell ?
becket est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/11/2010, 10h47   #9
Nouveau Membre du Club
 
Inscription : février 2009
Messages : 123
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 123
Points : 29
Points : 29
Excuse moi. Je ne comprend pas.

Qu'appelle tu un fichier awk ?

Je sais que c'est une commande unix/linux mais je ne savais pas que l'on pouvait creer un fichier awk.

Peut tu stp éclairer ma lanterne ?

Merci pour ta patience et ton aide

Amicalement
Steph70
steph70 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2010, 11h29   #10
Membre Expert
 
Avatar de becket
 
Frédéric Brugmans
Informaticien multitâche
Inscription : février 2005
Messages : 661
Détails du profil
Informations personnelles :
Nom : Frédéric Brugmans

Informations professionnelles :
Activité : Informaticien multitâche

Informations forums :
Inscription : février 2005
Messages : 661
Points : 1 196
Points : 1 196
Grâce à une option d'awk, tu peux lire un fichier des commandes. Je te laisse regarder comment cela fonctionne
becket est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/11/2010, 11h49   #11
Nouveau Membre du Club
 
Inscription : février 2009
Messages : 123
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 123
Points : 29
Points : 29
C'est bon, j'ai pu tester.

Il n'y a plus d'erreur, néanmoins la sortie me donne la totalité des MAGXXX et non pas que ceux ou il y a des différences.

En fait, ca fait la même chose qu'un more.

C'est mieux mais ce n'est pas encore ca

Amicalemnent
Steph70
steph70 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2010, 11h59   #12
Membre Expert
 
Avatar de becket
 
Frédéric Brugmans
Informaticien multitâche
Inscription : février 2005
Messages : 661
Détails du profil
Informations personnelles :
Nom : Frédéric Brugmans

Informations professionnelles :
Activité : Informaticien multitâche

Informations forums :
Inscription : février 2005
Messages : 661
Points : 1 196
Points : 1 196
C'est logique. Si tu essayes de comprendre le script et en regardant attentivement ton fichier à traiter, tu verras qu'il y a des différences entre les différentes colonnes de chaque ligne a comparer

Code :
1
2
3
4
5
6
7
8
 
{
 
if   (  ( $0 ~ /Enregistrement/ ) || ( $0 ~ /Compteur/ ) || ( $0 ~ /caissement/ )  )
        {
                print "$1-> " $1 " $2-> " $2 " $3-> " $3 " $4-> " $4 " $5-> " $5 " $6-> " $6 " $7-> " $7 " $8-> " $8
        }
}
becket est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h05.


 
 
 
 
Partenaires

Hébergement Web