2012-02-13 1 views
0

私は、リストのようなテキストファイルを持っている: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) 

私は5. selectで始まる行は、キーワードmytableが含まれている場合-----> 2012-02-13で始まる行のブロックを印刷したいです。

awkでそれを行うには?

+0

2012-02-13で新しいブロックを開始した場合、または '5で始まる行がある場合。 「 'mytable'を含まない」を選択して、そのマテリアルを無視しますか? –

答えて

1

このお試しください:私はあなたが(5. select * from mytableがそこにある場合、ブロックを印刷する)必要なものを正確に理解していた場合は

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

を。逆の出力をしたい場合は、

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

See it in action hereを試してみてください。

関連する問題