如何使用awk打印匹配模式的行块?

时间:2012-02-13 20:25:22

标签: awk filtering

我有一个像list这样的文本文件:

-----> 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做到这一点?

1 个答案:

答案 0 :(得分: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