2012-02-13 58 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