2010-12-15 5 views
1

Mon fichier est comme ceci:Comment imprimer la dernière gamme de motifs en utilisant awk?

/commencer motif/
premier match
/motif de fin/

autre texte

/début modèle/
deuxième match
/fin motif/

autre texte

/commencer motif/
C'est celui que je veux imprimer
/fin modèle/
autre texte

Comment puis-je imprimer le dernier match en utilisant awk? Je sais juste comment imprimer tous ces matches.

Répondre

1
awk 'END { print r } 
/end pattern/ { f = x } 
/begin pattern/ { f = 1; r = x } 
f++ > 1 { r = r ? r RS $0 : $0 } 
' infile 
1

Mémorisez le match en cours et utiliser le bloc END pour imprimer:

awk '/end pattern/{flag=0} flag{m=$0} /begin pattern/{flag =1} END{print m}' file 

Cela fonctionne s'il n'y a qu'une seule ligne entre/début modèle/et/motif de fin /.

Questions connexes