[shell] comment récupérer 2 lignes

comment récupérer 2 lignes [shell] - Shell/Batch - Programmation

Marsh Posté le 25-09-2003 à 10:11:02    

Bonjour,
 
Je suis actuellement confronté au probleme suivant :  
 
J'ai a récupérer dans un fichier log une ligne comprenant COMPLETED ou ABORTED (jusque la, ca va) et egalement la ligne du dessus !!
 
Le but etant d'obtenir si possible sur la meme ligne (fichier en sortie) la ligne avec COMPLETED ou ABORTED et la ligne directement au dessus.
 
Merci de m'aider :)
 
 

Reply

Marsh Posté le 25-09-2003 à 10:11:02   

Reply

Marsh Posté le 25-09-2003 à 10:17:21    

OS ?

Reply

Marsh Posté le 25-09-2003 à 10:19:12    

Désolé oui, j'aurrait du précisé, c'est sous AIX 4.3.3
 
Et langage : Ksh


Message édité par skwee le 25-09-2003 à 10:21:05
Reply

Marsh Posté le 25-09-2003 à 12:12:10    

Apres essaies sur essaie, j'ai enfi trouvé, je donne comment j'ai fait pour les interessés :)
 
awk '{
        memo=$0
                if ( $1 == "COMPLETED" || $1 == "ABORTED" ) ### les ABORTED et COMPLETED sont les 1er champs sur les lignes###
                { print NR }
        }' fichier_de_log  > fichier_temporaire
 
 
for i in `cat fichier_temporaire`
 
        do
                num=`expr ${i} - 1`
                a=`cat fichier_de_log | head -${num} | tail -1`
                b=`cat fichier_de_log | head -${i} | tail -1`
                echo "$b $a" >> fichier_de_résultats
 
        done
rm fichier_temporaire
 
 
Voila :)
 
si jamais des questions, demandez ^^ et si quelqu'un a une autre solution, je suis preneur evidement.

Reply

Marsh Posté le 16-10-2003 à 09:01:01    

man grep : il y a une option pour récupérer un nombre donné de lignes avant et après le match.
Mais là, je suis sous windows, alors j'ai pas la doc sous la main.

Reply

Marsh Posté le 16-10-2003 à 10:07:11    

grep -B 1 ...
 
B comme before, tu as aussi A comme after ;)

Reply

Marsh Posté le 17-10-2003 à 15:21:37    

Avec grep -B 1 blabla
je recup la ligne avant celle ou il y a blabla, or il me faut la ligne avant blabla et la ligne avec blabla en sortie sur une meme ligne.

Reply

Marsh Posté le 18-10-2003 à 19:36:10    

skwee a écrit :

Avec grep -B 1 blabla
je recup la ligne avant celle ou il y a blabla, or il me faut la ligne avant blabla et la ligne avec blabla en sortie sur une meme ligne.


 
Comme tu l'as écrit, awk paraît être une bonne solution à ton problème... que je traiterais comme ça:
 

Code :
  1. awk '
  2. /^blabla/ {
  3.      printf("%s %s\n",line_sav,$0);
  4.      exit 0;
  5. }
  6. {
  7.      line_sav = $0;
  8. }
  9.     ' > fichier_res


 
mais la solution avec le grep me plaît bien aussi:
 

Code :
  1. grep -B1 blabla | awk '{printf("%s ",$0)}END{printf("\n" )}' > fichier_res



---------------
Get the Cooool... Get the cool shoe-shine !
Reply

Marsh Posté le 20-10-2003 à 12:07:04    

skwee a écrit :

Avec grep -B 1 blabla
je recup la ligne avant celle ou il y a blabla, or il me faut la ligne avant blabla et la ligne avec blabla en sortie sur une meme ligne.


 :heink:  
 
avec grep -B 1 blabla tu recup la ligne avant celle ou il y a blabla, ET celle où il y a blabla !

Reply

Marsh Posté le 27-10-2003 à 15:25:58    

Ha, je ne savais pas. j'ai pas tester en fait car j'ai continuer avec ce que j'avais trouvé.
 
Merci de la précision :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed