Traitement fichier sous ksh
Fermé
leloup
-
zipe31 Messages postés 36402 Date d'inscription Statut Contributeur Dernière intervention -
zipe31 Messages postés 36402 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour, à tous,
J'ai un fichier qui est monté comme cela :
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 :
Est ce possible et surtout comment s'y prendre ?
Merci d'avance pour votre aide.
Cordialement à tous
Leloup
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:
- Traitement fichier sous ksh
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
5 réponses
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.
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.
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
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
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.
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.
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
Le grep -V n'existe pas non plus.
Et mon man grep ne m'indique pas la version.
Tout pour arranger quoi !!
Cordialement
leloup
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é.
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é.
https://www.ibm.com/it-infrastructure/power/os/aix
en théorie, tu devrais pouvoir avoir le grep GNU.
en théorie, tu devrais pouvoir avoir le grep GNU.