linux 中 awk 中 geline函数的用法及其与next的区别

 

001、首选测试awk中getline这个动作 做了什么

a、

[root@pc1 test1]# ls
a.txt
[root@pc1 test1]# cat a.txt          ## 测试数据
01 02
03 04
05 06 kk
07 08
09 10
11 12
13 14
[root@pc1 test1]# awk '{if($0 ~ /kk/) {getline} else {print $0}}' a.txt
01 02                                ## 输出结果表明,getline动作跳过了匹配行以及匹配行的下一行
03 04
09 10
11 12
13 14

 

b、连续两个getline动作

[root@pc1 test1]# ls
a.txt
[root@pc1 test1]# cat a.txt        ## 测试数据
01 02
03 04
05 06 kk
07 08
09 10
11 12
13 14
[root@pc1 test1]# awk '{if($0 ~ /kk/) {getline; getline} else {print $0}}' a.txt
01 02                              ## getline连续跳过了匹配行及其后的两行
03 04
11 12
13 14

 

c、getline这个动作做了什么?

跳过当前行以及下一行。

 

002、与next的区别

a、

[root@pc1 test1]# ls
a.txt
[root@pc1 test1]# cat a.txt
01 02                     ## 测试数据
03 04
05 06 kk
07 08
09 10
11 12
13 14
[root@pc1 test1]# awk '{if($0 ~ /kk/) {next} else {print $0}}' a.txt
01 02                     ## 可以观测到next跳过了匹配行
03 04
07 08
09 10
11 12
13 14

 

b、连续给与两个next

[root@pc1 test1]# ls
a.txt
[root@pc1 test1]# cat a.txt
01 02                                     ## 测试数据
03 04
05 06 kk
07 08
09 10
11 12
13 14
[root@pc1 test1]# awk '{if($0 ~ /kk/) {next; next} else {print $0}}' a.txt
01 02                                     ## 两个next跟一个next的效果相同
03 04
07 08
09 10
11 12
13 14
[root@pc1 test1]# awk '{if($0 ~ /kk/) {next; next; next} else {print $0}}' a.txt
01 02                                     ## 效应一样
03 04
07 08
09 10
11 12
13 14

 

c、next的作用

跳过匹配行;而且只对匹配行起作用,不管有多少个next;

 

003、getline与next的区别

getline跳过匹配行及下一行,并且可以对连续的下一行起作用;

next跳过当前行,且不管有多少个next仅对当前行有作用。

 

posted @ 2024-02-23 09:46  小鲨鱼2018  阅读(70)  评论(0)    收藏  举报