【发布时间】:2016-09-01 23:24:15
【问题描述】:
我读了一篇类似的帖子,标题为“仅当下一行与模式不匹配时打印匹配模式的行”,其中提到的解决方案是
awk 'a=/^O/{x=$0} !a&&x{print x;x=0;}' myfile
我只是想知道如果我想打印文件中的所有行,其下一行也以与当前行相同的模式开始。
例如
文件文本包含:
abc this is a line
def
abc this is line 2
ghi
abc this is line 3
abc this is line 4
jkl
mno
abc this is line 5
jkl
abc this is line 6
abc this is line 9
jkl
该命令应该只打印以下行:
abc this is line 3
abc this is line 6
任何帮助将不胜感激。
感谢所有帮助过的人。在此处稍微编辑原始问题以满足要求,因为当有多个类似的行时,以下内容将无济于事。
如果文件中的所有行都以不同的模式结束,那么 awk 命令是什么。
例如:如果文件包含:
Student name is A
Student name is B
Student name is C
result for C is pass
Student name is D
result for D is pass
Student name is E
result for E is pass
Student name is F
result for F is pass
Student name is G
result for G is pass
Student name is H
Student name is I
result for I is pass
如何使用 awk 打印学生未通过的所有带有学生姓名的行。 所以对于上面的例子,打印的行应该是:
Student name is A
Student name is B
Student name is H
我是否可以使用 awk 打印所有以 Student 开头且下一行不以字符串 PASS 结尾的行?
【问题讨论】:
-
如果连续 3 行或更多行以这种模式开头会怎样?
-
你在考虑这个倒退。如果您要翻牌并且翻出 K,那么根据您的下一张牌是否会是 A,此时很难做某事,因为您还没有看到下一张牌。另一方面,如果你翻出一张 A,如果你之前的牌是一张 K,那么做某事是非常容易的,因为你已经看过了。相同顺序的 2 张卡片,但以不同的方式思考它向您展示了一个艰难的解决方案和一个简单的解决方案。如果您可以根据之前发生的事情来做事,请避免尝试根据接下来发生的事情来做事情。
标签: awk