美文网首页js css html
awk语法-03-awk表达式(if语句、while循环、for

awk语法-03-awk表达式(if语句、while循环、for

作者: 玄德公笔记 | 来源:发表于2022-08-07 20:27 被阅读0次

    1. 条件表达式

    语法

    awk  '{print  (条件)?满足条件给出值:不满足条件给出值}' 文件名
    

    完整示例

    • 创建myAwk.awk文件
    #!/bin/awk -f
    BEGIN{
      FS=":";
      line="============================================";
      print "Type\t\tName\t\tId\n",line
    }
    
    {
      print ($3!=0&&$3<500)?"系统用户:\t"$1"\t\t"$3:"普通用户:\t"$1"\t\t"$3;
    }
    
    • 执行
    [root@liubei ~]# ./myAwk.awk /etc/passwd
    Type            Name            Id
     ============================================
    普通用户:      root            0
    系统用户:      bin             1
    系统用户:      daemon          2
    系统用户:      adm             3
    系统用户:      lp              4
    系统用户:      sync            5
    ……
    

    2. if 语句

    语法

    if(条件){
      执行内容
    }else if(){
      执行内容
    }else{
      执行内容
    }
    

    示例

    • 创建myAwk.awk 文件如下
    #!/bin/awk -f
    BEGIN{
      FS=":";
      line="============================================";
      printf "|%-20s|%-20s|%-20s\n%s\n","Type","Name","Id",line
    }
    {
    
      if($3==0){
        printf "|%-20s|%-20s|%-20s\n","root_user",$1,$3
      }else if($3>=1000){
        printf "|%-20s|%-20s|%-20s\n", "ord_user",$1,$3
      }else{
        printf "|%-20s|%-20s|%-20s\n", "sys_user",$1,$3
      }
    }
    
    
    • 执行
    [root@liubei ~]# ./myAwk.awk /etc/passwd
    |Type                |Name                |Id
    ============================================
    |root_user           |root                |0
    |sys_user            |bin                 |1
    |sys_user            |daemon              |2
    |sys_user            |adm                 |3
    |sys_user            |lp                  |4
    |sys_user            |sync                |5
    |sys_user            |shutdown            |6
    |sys_user            |halt                |7
    |sys_user            |mail                |8
    |sys_user            |operator            |11
    |sys_user            |games               |12
    |sys_user            |ftp                 |14
    |sys_user            |nobody              |99
    |sys_user            |systemd-network     |192
    |sys_user            |dbus                |81
    |sys_user            |polkitd             |999
    |sys_user            |sshd                |74
    |sys_user            |postfix             |89
    |sys_user            |chrony              |998
    |ord_user            |cloud_user          |1000
    |ord_user            |liubei              |1001
    |ord_user            |guanyu              |1002
    |ord_user            |guanping            |1003
    

    3. while循环

    语法

    while(循环条件){
      执行内容
    }
    

    示例

    每行打印10遍

    • 创建myAwk.awk 文件如下
    #!/bin/awk -f
    BEGIN{
      FS=":"
    }
    {
      i=0
      while(i<=10){
        print $1,$3
        i++
      }
    }
    
    • 执行
    [root@liubei ~]# ./myAwk.awk /etc/passwd
    root 0
    root 0
    root 0
    root 0
    root 0
    root 0
    root 0
    root 0
    root 0
    root 0
    root 0
    bin 1
    bin 1
    bin 1
    bin 1
    bin 1
    bin 1
    bin 1
    bin 1
    bin 1
    bin 1
    bin 1
    ……
    

    4. for 循环

    语法

      for(i=x;i<=n;i++){
        执行内容
      }
    
    

    示例

    • 创建myAwk.awk 文件如下

    每行打印10次

    #!/bin/awk -f
    BEGIN{
      FS=":"
    }
    {
      for(i=0;i<=10;i++){
        print $1,$3
      }
    }
    
    • 执行
    [root@liubei ~]# ./myAwk.awk /etc/passwd
    root 0
    root 0
    root 0
    root 0
    root 0
    root 0
    root 0
    root 0
    root 0
    root 0
    root 0
    bin 1
    bin 1
    bin 1
    bin 1
    bin 1
    bin 1
    bin 1
    bin 1
    bin 1
    bin 1
    bin 1
    ……
    

    5. 执行shell命令

    语法

    {system("内容1 " 内容2 )}
    

    说明:

    • 引号中的部分,会原封不动的传给系统
    • 引号外的部分,会经过awk处理后传给系统(因此变量要写在引号外)

    示例

    向每个普通用户家目录的用户名.txt文件内写当前时间

    • 创建myAwk.awk文件
    #!/bin/awk -f
    BEGIN{
      FS=":"
    }
    {
      if($3>1000){
        system("echo `date` > /home/"$1"/"$1".txt"  )
      }
    }
    
    
    • 执行
    [root@liubei ~]# ./myAwk.awk /etc/passwd
    [root@liubei ~]# cat /home/liubei/liubei.txt
    2022年 07月 31日 星期日 17:16:38 CST
    [root@liubei ~]# cat /home/guanyu/guanyu.txt
    2022年 07月 31日 星期日 17:16:38 CST
    

    相关文章

      网友评论

        本文标题:awk语法-03-awk表达式(if语句、while循环、for

        本文链接:https://www.haomeiwen.com/subject/jlhiwrtx.html