Awk 如何在第三行之后打印文本?
我有一个输入-有三次同一行的东西和同一行Awk 如何在第三行之后打印文本?,awk,Awk,我有一个输入-有三次同一行的东西和同一行 o 0 1 0 1 1 5.732820000 0.000 = PERIOD(0) 5456 text4 o 2 11 0 1 1 0.000000000 0.100 = d q/dt o 0 1 0 1 1 5.732820000 0.000 = PERIOD(0) 454 785 text7 o 2 11 0 1 1 0.000000000 0.100 = d q/dt o
o 0 1 0 1 1 5.732820000 0.000 = PERIOD(0)
5456
text4
o 2 11 0 1 1 0.000000000 0.100 = d q/dt
o 0 1 0 1 1 5.732820000 0.000 = PERIOD(0)
454
785 text7
o 2 11 0 1 1 0.000000000 0.100 = d q/dt
o 0 1 0 1 1 5.732820000 0.000 = PERIOD(0)
4
text78
o 2 11 0 1 1 0.000000000 0.100 = d q/dt
我想在第三个“同一行”和第三个“同一行结束”之间打印文本。请问怎么做
所需输出:
4
text78
解释
- 在
c
- 在
和^同一行$
^结束同一行$
- 如果
和c==3
f==1
同一行
)
解释
- 在
c
- 在
和^同一行$
^结束同一行$
- 如果
和c==3
f==1
表达式顺序控制输出中是否包括开始标记或结束标记(
同一行)。对于特定的文件数据格式:
awk '/^same line/ && ++cnt == 3{ found=1; next }found && /^end same line/{ exit }found' file
找到&&/^end-same-line/{exit}
-将在特定节上退出,以防止冗余处理(根据“第三个“同一行”和第三个“end-same-line”之间的定义)
输出:
4
text78
对于您的特定文件数据格式:
awk '/^same line/ && ++cnt == 3{ found=1; next }found && /^end same line/{ exit }found' file
找到&&/^end-same-line/{exit}
-将在特定节上退出,以防止冗余处理(根据“第三个“同一行”和第三个“end-same-line”之间的定义)
输出:
4
text78
非常感谢,请问这个错误是什么意思?我替换了start和endawk:cmd的文本。行:1://^o21101000000000.100=dq/dt$/{f=0}c==3&&f==1/^o 0 1 0 1 1 5.7328200000.000=期间(0)$/{c++;f=1}awk:cmd。第1行:^语法错误awk:cmd。行:1://^o21101000000000.100=dq/dt$/{f=0}c==3&&f==1/^o 0 1 0 1 1 5.7328200000.000=期间(0)$/{c++;f=1}awk:cmd。行:1:
@MarciaCross您的搜索字符串包含一个/
。您需要转义它,因为它是正则表达式模式分隔符。此外,如果搜索字符串中有更多特殊字符,则还需要对其进行转义。所以^
和$
之间的字符串应该是o211010000000000 0.100=dq\/dt
。谢谢。我不知道为什么我添加到问题中的输入不起作用。没有错误,但输出文件是空的。@MarciaCross有两个原因:(1)在0.000000000
之前和之后有多个空格(或表格),因此应该用\s+
替换单个空格;(2)模式中没有3或4个段落,只有两个。另外,您没有问正确的问题,因为您的结束模式与开始模式相同(这与您原来的问题不同)。@MarciaCross\s+
表示空白(至少一个)。如果开始搜索字符串和结束搜索字符串相同,则更容易,因为您将只计算匹配项并在匹配项计数等于3(或在您的示例中为2)时打印。非常感谢,请问这个错误是什么意思?我替换了start和endawk:cmd的文本。行:1://^o21101000000000.100=dq/dt$/{f=0}c==3&&f==1/^o 0 1 0 1 1 5.7328200000.000=期间(0)$/{c++;f=1}awk:cmd。第1行:^语法错误awk:cmd。行:1://^o21101000000000.100=dq/dt$/{f=0}c==3&&f==1/^o 0 1 0 1 1 5.7328200000.000=期间(0)$/{c++;f=1}awk:cmd。行:1:
@MarciaCross您的搜索字符串包含一个/
。您需要转义它,因为它是正则表达式模式分隔符。此外,如果搜索字符串中有更多特殊字符,则还需要对其进行转义。所以^
和$
之间的字符串应该是o211010000000000 0.100=dq\/dt
。谢谢。我不知道为什么我添加到问题中的输入不起作用。没有错误,但输出文件是空的。@MarciaCross有两个原因:(1)在0.000000000
之前和之后有多个空格(或表格),因此应该用\s+
替换单个空格;(2)模式中没有3或4个段落,只有两个。另外,您没有问正确的问题,因为您的结束模式与开始模式相同(这与您原来的问题不同)。@MarciaCross\s+
表示空白(至少一个)。如果开始搜索字符串和结束搜索字符串相同,则更容易,因为您只需在匹配计数等于3(或示例中为2)时计算匹配数并打印。