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
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
A voir également:
- Traitement fichier sous ksh
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier host - Guide
- Ouvrir fichier .bin - Guide
5 réponses
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
19 nov. 2010 à 10:03
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.
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
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
19 nov. 2010 à 12:53
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.
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.
Mince, tout d'abord et avant toutes chose mon grep n'a pas l'option "-A"
Amicalement
leloup
Amicalement
leloup
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
19 nov. 2010 à 14:40
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
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
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
19 nov. 2010 à 16:20
19 nov. 2010 à 16:20
Salut,
Doublon ;-(((
Doublon ;-(((
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
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
19 nov. 2010 à 15:59
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é.
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é.
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
19 nov. 2010 à 16:08
19 nov. 2010 à 16:08
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.