Traitement fichier sous ksh

Fermé
leloup - 19 nov. 2010 à 09:26
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 19 nov. 2010 à 16:20
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:

5 réponses

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
19 nov. 2010 à 10:03
oui, c'est possible, mais pas évidant.
Les outils dont tu aura besoin sont : grep et cut. Il faut maitriser aussi les "if" du shell (déjà du mal en bash, mais en ksh, je ne connait pas du tout)
avec grep, tu sélectionnes la ligne que tu veux comparer, ave cut les champs.
Une fois la comparaison faite, avec un grep ou un tail et des options, tu récupères ton bloc et l'écrit là où tu veux.

Voilà l'algorithme. Consulte les pages de manuel de grep, cut et tail. Je n'ai pas tout compris à ce que tu veux faire exactement, si tu précise, je pourrai être plus précis.
0
Tout d'abord merci de ton intérêt,

Ensuite, je ne vois pas trop ce que tu veux que je precise.

J'ai mis l'exemple dans mon premier post.

En fait j'ai un fichier avec plusieurs blocs qui commencent avec "MAGXXXX" et qui se termine par une ligne vide.

Dans ces blocs, il y a des champs qui vont deux par deux (emis et recus) et en gros, je voudrais renvoyer les blocs dont au moins un champs n'est pas équivalent (entre émis et recus) dans un autre fichier.

Merci pour ton aide
Cordialement
leloup
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
19 nov. 2010 à 12:53
ok, c'est plus clair. C'est tes histoires de champ qui n'était pas clair.
Bon, ce n'est vraiment pas évident à faire ton truc.
si chaque bloc fait toujours la même taille (8 lignes)
un grep -A MAGASIN doit te donner le bloc.
Le plus simple, je pense c'est de le mettre dans un fichier TMP et de traiter ce fichier TMP. Il faut faire des tests, genre for a in $(grep -A 8 MAGASIN fichier);do echo $a>TMP;if $(grep Enregistrement TMP|cut -f 2) != $(grep Enregistrement TMP|cut -f 3); then cat resu TMP;fi;done
Je pense déjà qu'il faut que tu testes les petits bout d'algorithme.
0
Mince, tout d'abord et avant toutes chose mon grep n'a pas l'option "-A"

Amicalement
leloup
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
19 nov. 2010 à 14:40
grep -V
man grep
te donnent quoi ?
normalement, grep -n te donne la ligne, donc avec tail head et des additions, tu devrais avoir la même chose. C'est quoi ton système ? BSD, UNIX ?
moi, j'ai grep GNU 2.5.1
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 408
19 nov. 2010 à 16:20
Salut,

Doublon ;-(((
0

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

Posez votre question
Je suis sur Aix 6.1

Le grep -V n'existe pas non plus.

Et mon man grep ne m'indique pas la version.

Tout pour arranger quoi !!

Cordialement
leloup
-1
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
19 nov. 2010 à 15:59
bon, je n'ai pas d'AIX sous la main, aussi je te conseil d'utiliser ton man grep pour voir ce que tu peux faire.
entre ksh et Aix, je peux t'aider dans l'algorithme, mais pas plus.
regarde tes man tail et head aussi. Si la version n'est pas trop merdique, tu doit pouvoir lui dire d'afficher l fin du fichier à partir d'une certaine ligne du début (du coup tu récupère le block).
Sinon, il y a l'utilitaire wc pour récupérer le nombre de ligne.
Au final tu dois pouvoir t'en sortir, mais c'est juste un peu plus long et compliqué.
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
19 nov. 2010 à 16:08
https://www.ibm.com/it-infrastructure/power/os/aix
en théorie, tu devrais pouvoir avoir le grep GNU.
0