我有一些像这样的数据
Data Table ABC
Data
Stop
Data
Data Stop
Data Foo
Data Foo
我正在尝试为表ABC设置awk范围,直到在同一列中停止。 到目前为止我试过这个
awk '/Table ABC/,/Stop/' q
Data Table ABC
Data
Stop
但我希望得到
Data Table ABC
Data
Stop
Data
Data Stop
答案 0 :(得分:2)
如果数据文件没有制表,但是格式化了固定长度,那么替代解决方案可能会更好用
awk '{m=match($0,"Table ABC"); if(m>0) p=m}
p {print; if(p==match($0,"Stop")) exit}' file
Data Table ABC
Data
Stop
Data
Data Stop
标记匹配的位置,开始打印,并在位置与结束模式匹配时结束。
无论匹配的位置如何,如果您想在结束模式的第二次出现时结束:
awk '/Table ABC/{p=1} p; /Stop/ && ++c==2{exit}' file
计数器c
计算结束模式并在第二次退出。
答案 1 :(得分:1)
awk 范围模式解决方案:
awk -F"[[:space:]][[:space:]]+" '$2=="Table ABC", $2=="Stop"' file
输出:
Data Table ABC
Data
Stop
Data
Data Stop
范围模式由两个以逗号分隔的模式组成 形成'
begpat, endpat
'。它用于匹配连续范围 输入记录。第一个模式begpat
控制范围 开始,而endpat
控制模式结束的位置。