2012-02-13 3 views
0

Je dispose d'un fichier de texte comme la liste:comment imprimer un bloc de lignes correspondant à un motif en utilisant awk?

-----> 2012-02-13 19:29:27.325 <http-0.0.0.0-9090-1> at org.jboss.resource.adapter.jdbc.WrappedPreparedStatement.executeQuery(WrappedPreparedStatement.java:236) 
    at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:187) 
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1787) 
    .... (many lines starts with at) 

5. select * from mytable 

-----> 2012-02-13 19:31:27.325 <http-0.0.0.0-9090-1> at 
... (many lines start with at, just like above) 

Je veux imprimer le bloc de lignes commençant par -----> 2012-02-13 si la ligne commençant par le mot-clé contient 5. selectmytable.

Comment faire ça avec awk?

+0

Mais si vous démarrez un nouveau bloc avec le 2012-02-13, ou si la ligne commençant par '5. select 'ne contient pas' mytable ', puis ignore le matériel? –

Répondre

1

Essayez ceci:

awk 'BEGIN {RS="----->"} /5\. select \* from mytable/ { printf("%s %s",RS,$0)}' INPUT_FILE 

Si je l'avais bien compris ce que vous avez besoin (imprimer le bloc, si 5. select * from mytable est là-bas). Si vous voulez une sortie inversée, essayez:

awk 'BEGIN {RS="----->"} ! /5\. select \* from mytable/ { printf("%s %s",RS,$0)}' INPUT_FILE 

See it in action here.

Questions connexes