文件如下所示:
2014-09-18 01:00:00 some txt1 .....
...................................
...................................
2014-09-18 01:00:01 some txt2 .....
...................................
2014-09-18 01:00:02 some txt3 .....
...................................
.....my-pattern....................
...................................
2014-09-18 01:00:03 some txt4 .....
...................................
我需要打印my-pattern之前和之后的每一行UNTIL第一次出现的日期,所以它应该如下所示:
2014-09-18 01:00:02 some txt3 .....
...................................
.....my-pattern....................
...................................
有什么想法吗? :)
答案 0 :(得分:3)
使用gnu-awk
可以使用RS
和RT
非常直接:
awk -v RS='201[0-9]' '/my-pattern/ {print f $0} {f=RT}' file
2014-09-18 01:00:02 some txt3 .....
...................................
.....my-pattern....................
..................................
答案 1 :(得分:0)
这样做:
awk '/^2014/ {
if (f) {for (i=1;i<=var;i++) print data[i]}
{f=0; delete data; var=0}
}
{data[++var]=$0}
/my-pattern/ {f=1}
' file
/^2014/ {}
#when行于2014年开始,执行... if (f) {for (i=1;i<=var;i++) print data[i]}
如果设置了标志,则打印存储的数据{f=0; delete data; var=0}
重置下一个块的标志和数据存储{data[++var]=$0}
存储每行的所有数据/my-pattern/ {f=1}
如果line包含my-pattern,请在$ awk '/^2014/ {if (f) {for (i=1;i<=var;i++) print data[i]} {f=0; delete data; var=0}} {data[++var]=$0} /my-pattern/ {f=1}' a
2014-09-18 01:00:02 some txt3 .....
...................................
.....my-pattern....................
...................................