Grep la ligne du dessus
Résoluzipe31 Messages postés 34620 Date d'inscription Statut Contributeur Dernière intervention -
Je cherche le moyen de renvoyer dans un fichier ma recherche grep + la ligne qui se trouve juste au dessus.
Je suis sur AIX et je n'ai pas l'impression que j'ai l'option sur mon grep.
Auriez vous une solution à me proposer ?
Merci d'avance pour votre aide
Stéphane70
- Grep afficher ligne
- Partager photos en ligne - Guide
- Apparaitre hors ligne instagram - Guide
- Mètre en ligne - Guide
- Afficher taille dossier windows - Guide
- Office en ligne - Guide
22 réponses
- 1
- 2
La problématique consiste à renvoyer dans un fichier la ligne correspondant à une recherche grep et la ligne qui la précède, surtout sur AIX où l’option -B peut manquer. Plusieurs répondants recommandent l’option -B n de grep pour afficher les lignes autour du motif, mais elle n’est pas toujours présente sur AIX; en absence d’elle, sed peut aider. Des discussions évoquent aussi des problèmes de retours chariot et des astuces avec sed ou des séparateurs pour que la ligne précédente apparaisse correctement. En cas de doute, tester sur un extrait et vérifier le format du fichier (CRLF) afin d’ajuster la commande et d’éviter les résultats incomplets.
Un exemple étant plus parlant qu'un grand discours, voici un exemple de fichier que je veux traiter :
156 truc machin bidule machin truc 156A00 Si refus : Erreur inconnue machin truc 156B00 ok machin truc 156COO ok 157 machin bidule chose machin chose 157A00 ok machin chose 157B00 ok machin chose 157C00
Donc je fais une recherche avec grep sur A00 et Erreur et ca me sort la ligne mais je voudrais aussi la ligne du dessus.
Mon script donne pour l'instant et avec pour resultat juste la recherche sur les motifs :
grep A00 Test|grep Erreur>>resultat
Merci pour ton aide
Amicalement
Stéphane70
$ cat plop
156 truc machin bidule
machin truc 156A00 Si refus : Erreur inconnue
machin truc 156B00 ok
machin truc 156COO ok
157 machin bidule chose
machin chose 157A00 ok
machin chose 157B00 ok
machin chose 157C00
$ sed -n '/A00.*Erreur/{H;1!g;p;};h' plop
156 truc machin bidule
machin truc 156A00 Si refus : Erreur inconnue
$
;-))
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionJe n'ai pas testé sur le bon fichier.
Ca fonctionne à merveille sur linux mais sur mon aix ca ne sort que la ligne en question.
Merci encore pour ton aide précieuse et ta sympathie.
Amicalement
Stéphane70
Néanmoins, je viens de voir précisement ce que cela me sort.
En fait, il donne la première ligne correspondante, il saute une ligne et donne les deux premierès correspondantes, il saute une ligne et donne les trois premières lignes correspondantes etc
Il me donne l'impression de boucler.
Amicalement
Stéphane70
Depot Date Heure Resultat Taille Duree Vx ==================================================================================================================================== 101 @POINT A@ 16/11/10 18:14 S0 Bonne execution 0 04 /usr1/TELFIC/101A00.ZIP,\TELFIC\101A00.ZIP,,,V SI Refus : fichier inexistant 0 04 /usr1/TELFIC/101C00.ZIP,\TELFIC\101C00.ZIP,,,V A* Non execute 0 04 /usr1/TELFIC/101H00.ZIP,\TELFIC\101H00.ZIP,,,V A* Non execute 0 04 /usr1/TELFIC/101F00.ZIP,\TELFIC\101F00.ZIP,,,V A* Non execute 0 04 -/usr1/TELFIC/101CC0.ZIP,\TELFIC\101CC0.ZIP,,,V A* Non execute 0 04 ------------------------------------------------------------------------------------------------------------------------------------ 102 @POINT B@ 16/11/10 18:00 S0 Bonne execution 1 04 /usr1/TELFIC/102A00.ZIP,\TELFIC\102A00.ZIP,,,V S0 Bonne execution 143 1 04 /usr1/TELFIC/102C00.ZIP,\TELFIC\102C00.ZIP,,,V S0 Bonne execution 145 0 04 /usr1/TELFIC/102H00.ZIP,\TELFIC\102H00.ZIP,,,V S0 Bonne execution 135 1 04 /usr1/TELFIC/102F00.ZIP,\TELFIC\102F00.ZIP,,,V S0 Bonne execution 135 1 04 -/usr1/TELFIC/102CC0.ZIP,\TELFIC\102CC0.ZIP,,,V S0 Bonne execution 722 1 04 ------------------------------------------------------------------------------------------------------------------------------------ 104 @POINT C@ 16/11/10 18:00 S0 Bonne execution 0 04 /usr1/TELFIC/104A00.ZIP,\TELFIC\104A00.ZIP,,,V SI Refus : fichier inexistant 731 1 04 /usr1/TELFIC/104C00.ZIP,\TELFIC\104C00.ZIP,,,V S0 Bonne execution 1767 1 04 /usr1/TELFIC/104H00.ZIP,\TELFIC\104H00.ZIP,,,V S0 Bonne execution 135 0 04 /usr1/TELFIC/104F00.ZIP,\TELFIC\104F00.ZIP,,,V S0 Bonne execution 135 1 04 -/usr1/TELFIC/104CC0.ZIP,\TELFIC\104CC0.ZIP,,,V S0 Bonne execution 5740 1 04 ------------------------------------------------------------------------------------------------------------------------------------ 108 @POINT D@ 16/11/10 18:00 S0 Bonne execution 0 04 /usr1/TELFIC/108A00.ZIP,/usr1/TELFIC/108A00.ZIP,,,V S0 Bonne execution 7845 1 04 /usr1/TELFIC/108C00.ZIP,/usr1/TELFIC/108C00.ZIP,,,V S0 Bonne execution 1235 1 04 /usr1/TELFIC/108H00.ZIP,/usr1/TELFIC/108H00.ZIP,,,V S0 Bonne execution 184 0 04 /usr1/TELFIC/108F00.ZIP,/usr1/TELFIC/108F00.ZIP,,,V S0 Bonne execution 7672 1 04 -/usr1/TELFIC/108CC0.ZIP,/usr1/TELFIC/108CC0.ZIP,,,V S0 Bonne execution 2869 1 04 -/usr1/TELFIC/108FDL.ZIP,/usr1/TELFIC/108FDL.ZIP,,,V S0 Bonne execution 5902 1 04 ------------------------------------------------------------------------------------------------------------------------------------
La commande :
sed -n '/A00.*inexistant/{H;1!g;p;};h' fichier
me donne le resultat suivant :
/usr1/TELFIC/101A00.ZIP,\TELFIC\101A00.ZIP,,,V SI Refus : fichier inexistant 0 04 /usr1/TELFIC/101A00.ZIP,\TELFIC\101A00.ZIP,,,V SI Refus : fichier inexistant 0 04 /usr1/TELFIC/104A00.ZIP,\TELFIC\104A00.ZIP,,,V SI Refus : fichier inexistant 731 1 04
Alors que je souhaiterais le resultat :
101 @POINT A@ 16/11/10 18:14 S0 Bonne execution 0 04 /usr1/TELFIC/101A00.ZIP,\TELFIC\101A00.ZIP,,,V SI Refus : fichier inexistant 0 04 104 @POINT C@ 16/11/10 18:00 S0 Bonne execution 0 04 /usr1/TELFIC/104A00.ZIP,\TELFIC\104A00.ZIP,,,V SI Refus : fichier inexistant 731 1 04
Voili, Voilou
Encore merci
Amicalement
Stéphane70
Donc je te donne le resultat donné sous linux :
^M$ Depot Date Heure Resultat Taille Duree Vx^M$ ====================================================================================================================================^M$ 101 @POINT A@ 16/11/10 18:14 S0 Bonne execution 0 04^M$ /usr1/TELFIC/101A00.ZIP,\TELFIC\101A00.ZIP,,,V SI Refus : fichier inexistant 0 04^M$ /usr1/TELFIC/101C00.ZIP,\TELFIC\101C00.ZIP,,,V A* Non execute 0 04^M$ /usr1/TELFIC/101H00.ZIP,\TELFIC\101H00.ZIP,,,V A* Non execute 0 04^M$ /usr1/TELFIC/101F00.ZIP,\TELFIC\101F00.ZIP,,,V A* Non execute 0 04^M$ -/usr1/TELFIC/101CC0.ZIP,\TELFIC\101CC0.ZIP,,,V A* Non execute 0 04^M$ ------------------------------------------------------------------------------------------------------------------------------------^M$ 102 @POINT B@ 16/11/10 18:00 S0 Bonne execution 1 04^M$ /usr1/TELFIC/102A00.ZIP,\TELFIC\102A00.ZIP,,,V S0 Bonne execution 143 1 04^M$ /usr1/TELFIC/102C00.ZIP,\TELFIC\102C00.ZIP,,,V S0 Bonne execution 145 0 04^M$ /usr1/TELFIC/102H00.ZIP,\TELFIC\102H00.ZIP,,,V S0 Bonne execution 135 1 04^M$ /usr1/TELFIC/102F00.ZIP,\TELFIC\102F00.ZIP,,,V S0 Bonne execution 135 1 04^M$ -/usr1/TELFIC/102CC0.ZIP,\TELFIC\102CC0.ZIP,,,V S0 Bonne execution 722 1 04^M$ ------------------------------------------------------------------------------------------------------------------------------------^M$ 104 @POINT C@ 16/11/10 18:00 S0 Bonne execution 0 04^M$ /usr1/TELFIC/104A00.ZIP,\TELFIC\104A00.ZIP,,,V SI Refus : fichier inexistant 731 1 04^M$ /usr1/TELFIC/104C00.ZIP,\TELFIC\104C00.ZIP,,,V S0 Bonne execution 1767 1 04^M$ /usr1/TELFIC/104H00.ZIP,\TELFIC\104H00.ZIP,,,V S0 Bonne execution 135 0 04^M$ /usr1/TELFIC/104F00.ZIP,\TELFIC\104F00.ZIP,,,V S0 Bonne execution 135 1 04^M$ -/usr1/TELFIC/104CC0.ZIP,\TELFIC\104CC0.ZIP,,,V S0 Bonne execution 5740 1 04^M$ ------------------------------------------------------------------------------------------------------------------------------------^M$ 108 @POINT D@ 16/11/10 18:00 S0 Bonne execution 0 04^M$ /usr1/TELFIC/108A00.ZIP,/usr1/TELFIC/108A00.ZIP,,,V S0 Bonne execution 7845 1 04^M$ /usr1/TELFIC/108C00.ZIP,/usr1/TELFIC/108C00.ZIP,,,V S0 Bonne execution 1235 1 04^M$ /usr1/TELFIC/108H00.ZIP,/usr1/TELFIC/108H00.ZIP,,,V S0 Bonne execution 184 0 04^M$ /usr1/TELFIC/108F00.ZIP,/usr1/TELFIC/108F00.ZIP,,,V S0 Bonne execution 7672 1 04^M$ -/usr1/TELFIC/108CC0.ZIP,/usr1/TELFIC/108CC0.ZIP,,,V S0 Bonne execution 2869 1 04^M$ -/usr1/TELFIC/108FDL.ZIP,/usr1/TELFIC/108FDL.ZIP,,,V S0 Bonne execution 5902 1 04^M$ ------------------------------------------------------------------------------------------------------------------------------------^M$ $
Amicalement
Stéphane70
Voilà le coupable ;-((
Des retours chariots à la WIndows ;-((
Ça m'étonne même que ça marche sous Ubuntu ;-\
Il faut convertir ton fichier sous AIX au format Unix. Soit avec dos2unix (si installé) soit avec "sed", voir la fiche : https://forums.commentcamarche.net/forum/affich-37620064-sed-conversion-retours-chariots-dos-crlf-unix-lf
Sinon essaye ça (sur AIX) :
sed -n 'N;/.*\r\n.*A00.*inexistant/p' fichier
Néanmoins, je vais jeter un oeil mais il me semble avoir déjà eu ce type de problème avec les transferts ftp.
Sinon la commande :
sed -n 'N;/.*\r\n.*A00.*inexistant/p' fichierne renvoi rien, même pas les lignes d'avant.
Amicalement
Stéphane70
101 @POINT A@ 16/11/10 1\
8:14 S0 Bonne execution 0 04\r$
/usr1/TELFIC/101A00.ZIP,\TELFIC\101A00.ZIP,,,V \
SI Refus : fichier inexistant 0 04\r$
/usr1/TELFIC/101C00.ZIP,\TELFIC\101C00.ZIP,,,V \
A* Non execute 0 04\r$
/usr1/TELFIC/101H00.ZIP,\TELFIC\101H00.ZIP,,,V \
A* Non execute 0 04\r$
/usr1/TELFIC/101F00.ZIP,\TELFIC\101F00.ZIP,,,V \
A* Non execute 0 04\r$
-/usr1/TELFIC/101CC0.ZIP,\TELFIC\101CC0.ZIP,,,V \
A* Non execute 0 04\r$
-----------------------------------------------------------------------\
-------------------------------------------------------------\r$
102 @POINT B@ 16/11/10 1\
8:00 S0 Bonne execution 1 04\r$
/usr1/TELFIC/102A00.ZIP,\TELFIC\102A00.ZIP,,,V \
S0 Bonne execution 143 1 04\r$
/usr1/TELFIC/102C00.ZIP,\TELFIC\102C00.ZIP,,,V \
S0 Bonne execution 145 0 04\r$
/usr1/TELFIC/102H00.ZIP,\TELFIC\102H00.ZIP,,,V \
S0 Bonne execution 135 1 04\r$
/usr1/TELFIC/102F00.ZIP,\TELFIC\102F00.ZIP,,,V \
S0 Bonne execution 135 1 04\r$
-/usr1/TELFIC/102CC0.ZIP,\TELFIC\102CC0.ZIP,,,V \
S0 Bonne execution 722 1 04\r$
-----------------------------------------------------------------------\
-------------------------------------------------------------\r$
104 @POINT C@ 16/11/10 1\
8:00 S0 Bonne execution 0 04\r$
/usr1/TELFIC/104A00.ZIP,\TELFIC\104A00.ZIP,,,V \
SI Refus : fichier inexistant 731 1 04\r$
/usr1/TELFIC/104C00.ZIP,\TELFIC\104C00.ZIP,,,V \
S0 Bonne execution 1767 1 04\r$
/usr1/TELFIC/104H00.ZIP,\TELFIC\104H00.ZIP,,,V \
S0 Bonne execution 135 0 04\r$
/usr1/TELFIC/104F00.ZIP,\TELFIC\104F00.ZIP,,,V \
S0 Bonne execution 135 1 04\r$
-/usr1/TELFIC/104CC0.ZIP,\TELFIC\104CC0.ZIP,,,V \
S0 Bonne execution 5740 1 04\r$
-----------------------------------------------------------------------\
-------------------------------------------------------------\r$
108 @POINT D@ 16/11/10 1\
8:00 S0 Bonne execution 0 04\r$
/usr1/TELFIC/108A00.ZIP,/usr1/TELFIC/108A00.ZIP,,,V \
S0 Bonne execution 7845 1 04\r$
/usr1/TELFIC/108C00.ZIP,/usr1/TELFIC/108C00.ZIP,,,V \
S0 Bonne execution 1235 1 04\r$
/usr1/TELFIC/108H00.ZIP,/usr1/TELFIC/108H00.ZIP,,,V \
S0 Bonne execution 184 0 04\r$
/usr1/TELFIC/108F00.ZIP,/usr1/TELFIC/108F00.ZIP,,,V \
S0 Bonne execution 7672 1 04\r$
-/usr1/TELFIC/108CC0.ZIP,/usr1/TELFIC/108CC0.ZIP,,,V \
S0 Bonne execution 2869 1 04\r$
-/usr1/TELFIC/108FDL.ZIP,/usr1/TELFIC/108FDL.ZIP,,,V \
S0 Bonne execution 5902 1 04\r$
Amicalement
Stéphane70
Je suis désolé mais tout a raté.
La première commande ne renvoi rien.
La deuxième commande renvoie les lignes avec inexistant mais pas la ligne du dessus.
Et les deux autres commandes ne renvoies rien également.
C'est à s'arracher les cheveux.
En tout cas merci pour ton aide précieuse.
Amicalement
Stéphane70
- 1
- 2