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仅对当前行有作用。

浙公网安备 33010602011771号