zoukankan      html  css  js  c++  java
  • 12、shell_awk

    AWK
    awk 是一个优良的文本处理工具,其名字来源于三个开发人员的名字首字母缩写。
    awk 不但是一个优良的文件处理工作,它还可以自己编程,编写awk 程序
     
    AWK基本格式:
         awk [option] 'BEGIN{...}{...}END{...}' [file]
     
    option:
      -F   指定字段分隔符,如果出现在文件中的话,要用FS=
      -f file   指定命令文件
     
    BEGIN{...}  起始段,里面的命令只执行一次且最先执行
     
    {...}      主体,里面的命令,会执行多次,处理的文件有多少行,就执行多少次,相当于之前的循环体(多次执行)
     
    END{...}    结束段,前面几段运行完后,再执行,里面的命令也只执行一次
     
    AWK 使用方法:
    1、命令行
    awk -F: '{print $1}' /etc/passwd

    2、命令文件

    cat awk.cmd
    {
             print $5 "'s name is "$1","$5"'s userid is "$3
    }
    
    awk -F: -f awk.cmd /etc/passwd

    3、用awk解释器

    cat a1.awk
    #!/bin/awk -f
      {
             print $5 "'s name is "$1","$5"'s userid is "$3
      }
    
    chmod 755 a1.awk
    ./a1.awk /etc/passwd
     
     
    多条命令的执行:
    分号(;) 分隔
    echo "My name is tom" | awk '{$4="mary";print $0}'
    My name is mary
     
    AWK可以调用系统命令:
    system (命令名)
     
    AWK 变量
        AWK 有内置变量,也支持用户自定义变量
    内置变量:
    $0 整行文本
    $1 第一个字段
    $2 第二个字段
    $3 第三个字段
    ...
    $NF 最后一个字段
    NF 字段个数
    NR 记录个数
     
    自定义变量
    变量由字母、数字、下划线组成,不能以数字开头,变量区分大小写
    另:在awk 中,变量取值时,一般不要在前面加 $
     
    自定义变量赋值的方法:
    1、在脚本中(或命令行中)
       awk 'BEGIN{t="abc+defg";print t}'
    2、在awk外部(如shell提示符)
    cat awk.cmd
    {
    print $n
    }
    awk -F: -f awk.cmd -v  n=7  /etc/passwd
     
    AWK使用正则表达式
    AWK使用正则表达式,正则表达式要出现在 // 中
     
    如:打印包含root的行的用户和shell
    AWK匹配操作符:  ~
    格式:~ /正则表达式/
     
    或:
    ! ~ /正则表达式/
     
    例:打印以n开头的用户
    awk -F: '/^n/{print $0}' /etc/passwd
    awk -F: '$0 ~ /^n/ {print $0}' /etc/passwd
    例:打印用户id以1开头的行
    awk -F: '$3 ~ /^1/{print $1"   "$3"  "$7}' /etc/passwd
    例:显示每个用户的用户名和它的shell
    awk -F: '{print $1"             "$7}' /etc/passwd
    例:显示每个磁盘的设备名、挂载点和它的使用百分比
    df -h | awk '{printf("%-15s%-15s%-35s ", $1,$6,$5)}'
    另:awk中可以进行一些简单编程
        
    运算符:
    数学运算符:
        >
        <
        >=
        <=
        ==
        !=
    
    例:打印组id为0的用户
      awk -F: '$4=0{print $0}' /etc/passwd
    关系运算符:
    >
    <
    >=
    <=
    ==
    !=
    ~   
    !~
    逻辑运算符
    ||
    &&
    !
     
    AWK命令行中进行条件判断
    条件放在{command}之前,不要if什么的(文件中要用if)
    例:打印 用户id在10以内的用户名,id ,shell
    AWK的流程控制:
    if (condition) {
    commands
        }
    作用:判断condtion是否成立,成立执行commands
    if (condition) {
    commands1
        }
    else
        {
    commands2
        }
    作用:判断condtion是否成立,成立执行commands1,不成立执行commands2
    while ()
        {
    commands
        }
    例:打印  /etc/passwd 偶数行
      awk 'NR%2 == 0{print $0}' aa.txt
     
    例:用awk 统计一个文件的空行数
    #!/bin/awk -f
    BEGIN{
            c=0
    }
    {
            if ($0 ~ /^ *$/) {
                    c=c+1
            }
    }
    END {
            print c
    }
    
    [root@t183 test]# ./a2.awk aa.txt
    5.例:awk求指定数的阶乘,数由调时给定
    [root@t183 test]# cat a3.awk
    BEGIN {
             s=1
             while (n>1)   #n是由外部给定的求阶乘的数
             {
                     s=s*n
                     n=n-1
             }
             print s
    }
    
    [root@t183 test]# awk -f a3.awk -v n=5
    120
     
       
  • 相关阅读:
    递归
    二叉树
    IIs 网站应用程序与虚拟目录的区别及高级应用说明(文件分布式存储方案)
    Python时间,日期,时间戳之间转换
    jquery 时间戳和日期时间转化
    javascript 中解析json
    设计模式之单例模式
    深入理解DIP、IoC、DI以及IoC容器
    《大型网站技术架构》读书笔记一:大型网站架构演化
    Key/Value之王Memcached初探:二、Memcached在.Net中的基本操作
  • 原文地址:https://www.cnblogs.com/steven9898/p/11331207.html
Copyright © 2011-2022 走看看