Imprimer les lignes avant et apres l'expression rechercher

Imprimer les lignes avant et apres l'expression rechercher - Shell/Batch - Programmation

Marsh Posté le 30-08-2007 à 21:33:08    

J'ai un fichier avec le format suivant :
 

Code :
  1. Fichier : mon_fichier1
  2. Begin : 2007-08-29
  3. processed  : 0
  4. End : 2007-08-29
  5. Fichier : mon_fichier2
  6. Begin : 2007-08-29
  7. processed : 4
  8. End : 2007-08-29
  9. Fichier : mon_fichier3
  10. Begin : 2007-08-29
  11. processed : 6
  12. End : 2007-08-29
  13. Fichier : mon_fichier4
  14. Begin : 2007-08-29
  15. processed : 0
  16. End : 2007-08-29


 
Est ce qu'il y a une commande sous unix qui permet d'avoir en sortie tous les nom des fichiers avec : "processed  : 0", c.a.d avoir comme sortie dans mon exemple :
 

Code :
  1. Fichier : mon_fichier1
  2. Begin : 2007-08-29
  3. processed  : 0
  4. End : 2007-08-29
  5. Fichier : mon_fichier4
  6. Begin : 2007-08-29
  7. processed : 0
  8. End : 2007-08-29


 
Merci d'avance
 
 

Reply

Marsh Posté le 30-08-2007 à 21:33:08   

Reply

Marsh Posté le 30-08-2007 à 22:26:35    

C'est faisable avec un petit awk, qui ressemblera à ceci (non testé) :

awk 'BEGIN {
    memo_ligne_fichier = ""
    memo_begin = ""
     }
     {
       if ($0 == "processed : 0" ) {
          print memo_ligne_fichier
          print memo_begin
          print
       }
       else {
          if ($1 == "Fichier" ) {
             memo_ligne_fichier = $0
          }
          else {
             if ($1 == "Begin" ) {
                memo_begin = $0
             }
         }
       }
     } ' le_fichier_de_log.txt

Reply

Marsh Posté le 01-09-2007 à 19:02:17    

Si tu as la version GNU de grep, tu peux aussi faire :

grep -B2 -A1 'processed : 0' input_file


 
Jean-Pierre.

Reply

Marsh Posté le 01-09-2007 à 21:40:49    

demo2000 a écrit :

Est ce qu'il y a une commande sous unix qui permet d'avoir en sortie tous les nom des fichiers avec : "processed  : 0"


Comme tu le vois dans les réponses, t'as plein d'outils qui te permettent de créer le résultat attendu.
 
Ton truc est trop spécifique pour qu'une commande toute faite puisse faire ça. Mais Unix t'offre un tas d'outils de manipulation de fichiers qui te permettent, en les combinant comme il faut, d'atteindre n'importe quel résultat à partir de n'importe quelle donnée.
 
 


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 02-09-2007 à 10:26:33    

olivthill a écrit :

C'est faisable avec un petit awk, qui ressemblera à ceci (non testé) :

awk 'BEGIN {
    memo_ligne_fichier = ""
    memo_begin = ""
     }
     {
       if ($0 == "processed : 0" ) {
          print memo_ligne_fichier
          print memo_begin
          print
       }
       else {
          if ($1 == "Fichier" ) {
             memo_ligne_fichier = $0
          }
          else {
             if ($1 == "Begin" ) {
                memo_begin = $0
             }
         }
       }
     } ' le_fichier_de_log.txt



 
Merci olivthill ça marche  
 

aigles a écrit :

Si tu as la version GNU de grep, tu peux aussi faire :

grep -B2 -A1 'processed : 0' input_file


 
Jean-Pierre.


 
OS = HP-UX, les options B2 et A1 n'existent pas !
 
 

Sve@r a écrit :


Comme tu le vois dans les réponses, t'as plein d'outils qui te permettent de créer le résultat attendu.
 
Ton truc est trop spécifique pour qu'une commande toute faite puisse faire ça. Mais Unix t'offre un tas d'outils de manipulation de fichiers qui te permettent, en les combinant comme il faut, d'atteindre n'importe quel résultat à partir de n'importe quelle donnée.
 


 
Effectivement, je vais essayer de trouver une autre solution aved : sed
 
 
Merci encore
 
 
 

Reply

Sujets relatifs:

Leave a Replay

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