AWK打印匹配之间的下一行匹配

AWK打印匹配之间的下一行匹配,awk,Awk,假设我有一个包含以下数据的test.txt文件: .0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 START 90 34 17 34 10 100 20 2056 30 0.0 10 53 20 2345 30 0.0 10 45 20 875 30 0.0 END 0.0 48 0.0 49 0.0 140 0.0 在AWK中,我如何在开始和结束之间打印10和20之后的行。 因此,输出将是。 100 2056 53 2345 45 875 我能用1

假设我有一个包含以下数据的test.txt文件:

.0
41
0.0
42
0.0
43
0.0
44
0.0
45
0.0
46
0.0
START
90
34
17
34
10
100
20
2056
30
0.0
10
53
20
2345
30
0.0
10
45
20
875
30
0.0
END
0.0
48
0.0
49
0.0
140
0.0
在AWK中,我如何在开始和结束之间打印10和20之后的行。 因此,输出将是。

100
2056
53
2345
45
875
我能用10和20来获得线路

awk '/START/,/END/ {if($0==10 || $0==20) print $0}' test.txt 

但是我怎样才能得到下一行呢?

我真的得到了我想要的东西

awk '/^START/,/^END/ {if($0==10 || $0==20) {getline; print} }' test.txt

我真的得到了我想要的

awk '/^START/,/^END/ {if($0==10 || $0==20) {getline; print} }' test.txt

我真的得到了我想要的

awk '/^START/,/^END/ {if($0==10 || $0==20) {getline; print} }' test.txt

我真的得到了我想要的

awk '/^START/,/^END/ {if($0==10 || $0==20) {getline; print} }' test.txt

awk
中的范围工作正常,但不如使用标志灵活

awk '/^START/ {f=1} /^END/ {f=0} f && /^(1|2)0$/ {getline;print}' file
100
2056
53
2345
45
875

awk
中的范围工作正常,但不如使用标志灵活

awk '/^START/ {f=1} /^END/ {f=0} f && /^(1|2)0$/ {getline;print}' file
100
2056
53
2345
45
875

awk
中的范围工作正常,但不如使用标志灵活

awk '/^START/ {f=1} /^END/ {f=0} f && /^(1|2)0$/ {getline;print}' file
100
2056
53
2345
45
875

awk
中的范围工作正常,但不如使用标志灵活

awk '/^START/ {f=1} /^END/ {f=0} f && /^(1|2)0$/ {getline;print}' file
100
2056
53
2345
45
875

不要使用范围,因为它们使琐碎的事情变得稍微简单,但当事情变得稍微复杂时,需要完全重写或复制条件

不要使用getline,除非它是一个合适的应用程序,并且您已经阅读并完全理解了它

只需让awk按照设计阅读您的台词:

$ cat tst.awk
/START/  { inBlock=1 }
/END/    { inBlock=0 }
foundTgt { print; foundTgt=0 }
inBlock && /^[12]0$/ { foundTgt=1 }

$ awk -f tst.awk file
100
2056
53
2345
45
875
如果您觉得有用,可以随意使用单字符变量名并将其全部填充到一行:

awk '/START/{b=1} /END/{b=0} f{print;f=0} b&&/^[12]0$/{f=1}' file

不要使用范围,因为它们使琐碎的事情变得稍微简单,但当事情变得稍微复杂时,需要完全重写或复制条件

不要使用getline,除非它是一个合适的应用程序,并且您已经阅读并完全理解了它

只需让awk按照设计阅读您的台词:

$ cat tst.awk
/START/  { inBlock=1 }
/END/    { inBlock=0 }
foundTgt { print; foundTgt=0 }
inBlock && /^[12]0$/ { foundTgt=1 }

$ awk -f tst.awk file
100
2056
53
2345
45
875
如果您觉得有用,可以随意使用单字符变量名并将其全部填充到一行:

awk '/START/{b=1} /END/{b=0} f{print;f=0} b&&/^[12]0$/{f=1}' file

不要使用范围,因为它们使琐碎的事情变得稍微简单,但当事情变得稍微复杂时,需要完全重写或复制条件

不要使用getline,除非它是一个合适的应用程序,并且您已经阅读并完全理解了它

只需让awk按照设计阅读您的台词:

$ cat tst.awk
/START/  { inBlock=1 }
/END/    { inBlock=0 }
foundTgt { print; foundTgt=0 }
inBlock && /^[12]0$/ { foundTgt=1 }

$ awk -f tst.awk file
100
2056
53
2345
45
875
如果您觉得有用,可以随意使用单字符变量名并将其全部填充到一行:

awk '/START/{b=1} /END/{b=0} f{print;f=0} b&&/^[12]0$/{f=1}' file

不要使用范围,因为它们使琐碎的事情变得稍微简单,但当事情变得稍微复杂时,需要完全重写或复制条件

不要使用getline,除非它是一个合适的应用程序,并且您已经阅读并完全理解了它

只需让awk按照设计阅读您的台词:

$ cat tst.awk
/START/  { inBlock=1 }
/END/    { inBlock=0 }
foundTgt { print; foundTgt=0 }
inBlock && /^[12]0$/ { foundTgt=1 }

$ awk -f tst.awk file
100
2056
53
2345
45
875
如果您觉得有用,可以随意使用单字符变量名并将其全部填充到一行:

awk '/START/{b=1} /END/{b=0} f{print;f=0} b&&/^[12]0$/{f=1}' file


这将匹配任何包含10或20的内容,如100。@JID在您发表评论之前已修复:)这将匹配任何包含10或20的内容,如100。@JID在您发表评论之前已修复:)这将匹配任何包含10或20的内容,如100。@JID在您发表评论之前已修复:)这将匹配任何包含10或20的内容,如100.@JID在您的评论发布之前已修复:)另一种方式
awk'x/START/,/END/{if(x | |/^(10 | 20)$/)x=!x}'文件
@JID可以工作,但可读性较差。并且可以缩短一些
^(1 | 2)0$
@Jotne
^(1 | 2)0$
实际上会损害可读性,尽管您搜索的内容不太明显,尤其是在使用大量数字的情况下/START/,/END/{if(x | |/^(10 | 20)$/)x=!x}'文件@JID可以工作,但可读性较差。并且可以缩短一些
^(1 | 2)0$
@Jotne
^(1 | 2)0$
实际上会损害可读性,尽管您搜索的内容不太明显,尤其是在使用大量数字的情况下/START/,/END/{if(x | |/^(10 | 20)$/)x=!x}'文件@JID可以工作,但可读性较差。并且可以缩短一些
^(1 | 2)0$
@Jotne
^(1 | 2)0$
实际上会损害可读性,尽管您搜索的内容不太明显,尤其是在使用大量数字的情况下/START/,/END/{if(x | |/^(10 | 20)$/)x=!x}'文件@JID可以工作,但可读性较差。并且可以缩短一些
^(1 | 2)0$
@Jotne
^(1 | 2)0$
实际上会损害可读性,尽管您搜索的内容不太明显,尤其是在使用大数字的情况下。我发现这一行更容易理解。另外,虽然
^[12]0$
保存了一两个字符,但我发现/^(10 | 20)$/可以更清楚地显示您正在搜索的内容,尤其是如果数字更大或我认为有很多马。我发现
^[12]0$
更清晰。哦,我觉得这一行更容易理解。另外,虽然
^[12]0$
保存了一两个字符,但我发现/^(10 | 20)$/可以更清楚地显示您正在搜索的内容,尤其是如果数字更大或我认为有很多马。我发现
^[12]0$
更清晰。哦,我觉得这一行更容易理解。另外,虽然
^[12]0$
保存了一两个字符,但我发现/^(10 | 20)$/可以更清楚地显示您正在搜索的内容,尤其是如果数字更大或我认为有很多马。我发现
^[12]0$
更清晰。哦,我觉得这一行更容易理解。另外,虽然
^[12]0$
保存了一两个字符,但我发现/^(10 | 20)$/可以更清楚地显示您正在搜索的内容,尤其是如果数字更大或我认为有很多马。我发现
^[12]0$
更清晰。哦,好吧。