精通awk系列(19):awk流程控制之break、continue、next、nextfile、exit语句



回到:

  • Linux系列文章
  • Shell系列文章
  • Awk系列文章

break和continue

break可退出for、while、do...while、switch语句。

continue可让for、while、do...while进入下一轮循环。

awk '
BEGIN{
  for(i=0;i<10;i++){
    if(i==5){
      break
    }
    print(i)
  }

  # continue
  for(i=0;i<10;i++){
    if(i==5)continue
    print(i)
  }
}'

next和nextfile

next会在当前语句处立即停止后续操作,并读取下一行,进入循环顶部。

例如,输出除第3行外的所有行。

awk 'NR==3{next}{print}' a.txt
awk 'NR==3{getline}{print}' a.txt

nextfile会在当前语句处立即停止后续操作,并直接读取下一个文件,并进入循环顶部。

例如,每个文件只输出前2行:

awk 'FNR==3{nextfile}{print}' a.txt a.txt

exit

exit [exit_code]

直接退出awk程序。

注意,END语句块也是exit操作的一部分,所以在BEGIN或main段中执行exit操作,也会执行END语句块。

如果exit在END语句块中执行,则立即退出。

所以,如果真的想直接退出整个awk,则可以先设置一个flag变量,然后在END语句块的开头检查这个变量再exit。

BEGIN{
    ...code...
    if(cond){
        flag=1
        exit
    }
}
{}
END{
    if(flag){
        exit
    }
    ...code...
}

awk '
    BEGIN{print "begin";flag=1;exit}
    {}
    END{if(flag){exit};print "end2"}
' 

exit可以指定退出状态码,如果触发了两次exit操作,即BEGIN或main中的exit触发了END中的exit,且END中的exit没有指定退出状态码时,则采取前一个退出状态码。

$ awk 'BEGIN{flag=1;exit 2}{}END{if(flag){exit 1}}'
$ echo $?
1

$ awk 'BEGIN{flag=1;exit 2}{}END{if(flag){exit}}'
$ echo $?
2

原文地址:https://www.cnblogs.com/f-ck-need-u/p/12381997.html

时间: 2024-10-02 07:57:12

精通awk系列(19):awk流程控制之break、continue、next、nextfile、exit语句的相关文章

Linux进阶之bash编程(流程控制-while,break,continue)

在bash编程中,经常会涉及使用while语句,时常处理未知循环次数的情况. while语法 while [ express ] do #command Done 2. 实战练习 提示输入大于10小于20的整数: while1.sh: #!/bin/bash echo -n "please input a digit between 10 and 20:" read n while [ $n -lt 10 ]||[ $n -gt 20 ] do echo -n "please

流程控制之 break ,continue,return的区别

首先文字描述一下区别: break 为终止当前循环.跳出当前循环,但是后面的语句(即当前方法中当前循环之外后面的语句)还是会执行. continue 为停止本次循环,继续执行后面的循环.当然后面的语句还是会执行 return  为终止当前循环(跟break很像),跳出当前方法. 看概念是不是不容易明白,下面直接撸代码.简单明了 public class Test { public static void main(String[] args) { for(int i=1;i<4;i++){ Sy

19 程序流程控制

1,顺序控制:程序从上到下逐行地执行,中间没有任何判断和跳转 2,分支控制:让程序有选择地执行 ①单分支 if (条件表达式){ 执行代码块; } ②双分支 if (条件表达式){ 执行代码块 1 ; } else { 执行代码块2 ; } ③多分支 if (条件表达式1){ 执行代码块 1 ; } else if (条件表达式 2){ 执行代码块2 ; } .... else { 执行代码块 n ; } ④嵌套分支:在一个分支结构中又完整的嵌套了另一个分支结构,里面的分支的结构称为内层分支,外

三、流程控制:if、while、for语句

条件语句 if语句 if 条件一: 成立执行代码 else 条件二: 成立执行代码 else: 以上均不成立时执行代码 注:从上到下依次判断,直到条件成立时执行对应代码,不再继续往下走 例子: name=input('请输入用户名字:') password=input('请输入密码:') if name == 'shuai' and password == '123': print('登录成功') else: print('用户名或密码错误') 循环语句 while循环(条件循环) while

流程控制(2017.1.8)分支语句:if-else(2017.1.9)

1.顺序结构 2.分支结构:if-else,switch-case. 3.循环结构:while,do....while,for( ; ; ),foreach If语句三种格式: 1.if(true){ 执行代码块:} 2.if(条件表达式){ 执行代码块;} Else{ 执行代码块;} 3.if(条件表达式){ 执行代码块;} Else if(条件表达式){ 执行代码块;} ..........else{ 执行代码块;} 总结:①执行if-else语句时,一定会选择其中一个路径执行:且仅会  选

流程控制之break、continue、return的用法

1 break语句 break 强制当前循环终止 break 跳出当前循环 跳出循环后继续执行后面的代码. 2 continue语句 continue 停止本次循环,继续执行剩下的循环 for(int i=0;i<10;i++){ if(i==6){ continue; } System.out.println(i); } 3 return语句 从当前的方法中退出.执行return之后,该方法内后面剩余的代码均不会执行. for(int i=0;i<10;i++){ if(i==6){ ret

Python 基础(三)——流程控制之break 、continue 、else

break break 语句和 C 中的类似,用于跳出最近的一级 for 或 while 循环. 循环可以有一个 else 子句:它在循环迭代完整个列表(对于 for )或执行条件为 false (对于 while )时执行,但循环被 break 中止的情况下不会执行.以下搜索素数的示例程序演示了这个子句: >>> for n in range(2, 10): ... for x in range(2, n): ... if n % x == 0: ... print(n, 'equal

精通awk系列(18):awk流程控制之if、while、switch、for语句

回到: Linux系列文章 Shell系列文章 Awk系列文章 流程控制语句 注:awk中语句块没有作用域,都是全局变量. if (condition) statement [ else statement ] expr1?expr2:expr3 while (condition) statement do statement while (condition) for (expr1; expr2; expr3) statement for (var in array) statement br

精通awk系列(14):细说awk中的变量和变量赋值

回到: Linux系列文章 Shell系列文章 Awk系列文章 awk变量 awk的变量是动态变量,在使用时声明. 所以awk变量有3种状态: 未声明状态:称为untyped类型 引用过但未赋值状态:unassigned类型 已赋值状态 引用未赋值的变量,其默认初始值为空字符串或数值0. 在awk中未声明的变量称为untyped,声明了但未赋值(只要引用了就声明了)的变量其类型为unassigned. gawk 4.2版提供了typeof()函数,可以测试变量的数据类型,包括测试变量是否声明.