如何从匹配到文件结尾打印?

时间:2019-08-14 12:44:03

标签: awk

我有一个输入:

 achil           1   234671.82694245825        234671.82694245825       0.43995134290095084     
 achil           2   234671.82694245825        234671.82694245825       0.43995134290095084     
o 0  1 0 1 1      5.732820000     0.000 = PERIOD(0)
4
5
6
1
2

我想从o 0 1 0 1 1 5.732820000 0.000 = PERIOD(0)行开始打印到文件末尾。

所需的输出:

o 0  1 0 1 1      5.732820000     0.000 = PERIOD(0)
4
5
6
1
2

我尝试过:

awk '/o 0\s+1 0 1 1\s+5.732820000\s+0.000 = PERIOD(0)/,/*/' input > output

,输出为空文件。请问怎么了?

2 个答案:

答案 0 :(得分:2)

尝试以下操作:

awk '/o 0  1 0 1 1/,0' input 

请考虑使用此衬纸awk /pattern1/,/pattern2/' input。它匹配所有以匹配“ pattern1”的行开始并一直持续到匹配“ pattern2”(包括)的行。

在这种单行代码中,“ pattern1”为“ o 0 1 0 1 1”,“ pattern2”仅为0(假)。因此,这种单行打印从匹配“ o 0 1 0 1 1”的行开始的所有行,并继续到文件结尾(因为0始终为false,而“ pattern2”从未匹配)

Reference

答案 1 :(得分:2)

这也可以:

awk '/o 0  1 0 1 1/ {f=1} f' file
o 0  1 0 1 1      5.732820000     0.000 = PERIOD(0)
4
5
6
1
2

找到模式后,将标志f设置为true。
当标志f为true时,执行默认操作,打印