2012-02-13 104 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) 

我想打印的行開始-----> 2012-02-13如果開頭的行5. select塊包含關鍵字mytable

如何用awk做到這一點?

+0

但是如果你用2012-02-13開始一個新塊,或者如果以'5開頭的行。選擇'不包含'mytable',然後忽略材料? – 2012-02-13 20:32:46

回答

1

試試這個:

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

如果我正確的,你需要了解什麼(打印塊,如果5. select * from mytable在那裏)。如果你想有一個反向輸出,嘗試:

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

See it in action here