AWK
类型
    AWK:源于AT&T实验室的AWK
    NAWK:AWK的升级版
    GAWK:GNU AWK,兼容AWK和NAWK
    
程序结构
    BEGIN语句块,可选
        BEGIN {awk-commands}
    
    BODY语句块
        /pattern/ {awk-commadns}
        
    END语句块
        END {awk-commands}
    
    例:awk
            'BEGIN{printf "sr no\tname\tsub\tmarks\n"}
            {print}
            END{this is a test}' masks.txt
    
基础语法
    格式:awk [options] file....
        例:awk ‘{print}’ masks.txt
    
    选项:
        -f:指定脚本文件
            1、创建脚本文件commands.awk
                vim command.awk
                    {print}
            2、执行
                awk -f command.awk marks.txt
        
        -v:变量赋值在程序开始前赋值
            例:awk -v name=jerry 'BEGIN{printf "Name = %s\n",name}'
            
        --dump-variables[=file]:
            输出排好序的全局变量列表和它们最终的值到文件中,默认文件维awkvars.out
            例:awk --dump-variables ''
            
        --lint[=fatal]
            检查程序的不兼容性或模棱两可的代码,参数fatal:将warning作为error
            例:awk --lint '' /bin/ls
            
        --profile[=file]
            输出一发格式化之后的程序到文件,默认文件维awkprof.out
            例:awk --profile=test.out 'BEGIN{printf "---|Header|--\n"}
                                        {print}
                                        END{printf "---|Footer|---\n"}' marks.txt
                                        
        --traditional:禁止所有的gawk规范的扩展
        
        --version:输出版本号

内置变量
    NR:记录数量,在执行过程中对应当前行号
    NF:字段数量,执行过程中对应当前行的字段数
    $0:宝行执行过程中当前行的文本内容
    $1:包含第一个字段的文本内容
    $2:包含第二个字段的内容
    FILENAM:表示正在处理的数据文件的名称
    FS:字段分割字符,默认值是空格或者制表符
    OFS:输出字段分隔符
    RS:记录分隔符,默认为换行符
    ORS:输出记录分隔符
    
    例:awk '{printf $3 $4}' marks
        输出第三和第四字段
        
        awk '/a/' marks
            输出包含a的行
            #‘/pattern/’:匹配模式,正则表达式
            
        awk ‘/a/ {print $3 "\t" $4}’ marks
            输出包含a的
            
    统计匹配模式的行数
        awk '/a/ {++cnt} END{print "Count=",cnt}' marks.txt
        
    打印超过18个字符的行
        awk ‘length($0)>18’ marks
        
    ARGC:输出命令行参数个数
        例:awk 'BEGIN{ print "Arguments =",ARGC}' one two three four
        
    ARGV:以数组的形式输出命令行参数
        例:awk 'BEGIN{
                for (i=0;i<ARGC;i++){
                    printf "ARGV[%d] = %s\n",i,ARGV[i]
                    }
                }' one two three four
                
    CONVFMT:数字的约定格式,默认是%.6g
        例:awk 'BEGIN{ print "Conversion Format =%.6g",CONVFMT}'
        
    OFMT:输出格式数字
        例:awk 'BEGIN{print "OFMT = " OFMT}'
        
    ENVIRON:环境变量的关联数值
        例:awk 'BEGIN { print ENVIRON["PATH"]}'
        
    FILENAME:当前用户名
        例:awk 'END {print FILENAME}' marks.txt

FS:字段分隔符,默认空格或制表符,可以通过选项-F来使用
        例:awk 'BEGIN{print "FS=" FS}' | cat -vte
            或
            awk -F: 'BEGIN{print "FS= " FS}' | cat -vte
            
            
    NF:字段数量,执行过程中对应当前行的字段数
        例:echo -e "one two\none two three\none two three four" | awk 'NF>2'
        
    NR:记录数量,在执行过程中对应当前行号
        例:echo -e "one two\none two three\none two three four" | awk 'NR>2'
         
操作符
    算术操作符,加减乘除取余
        +-*/%
        
        指数:num^
            或
                num **
        
        例:    $ awk 'BEGIN { a = 50; b = 20; print "(a + b) = ", (a + b) }'
    
                $ awk 'BEGIN { a = 50; b = 20; print "(a - b) = ", (a - b) }'

$ awk 'BEGIN { a = 50; b = 20; print "(a * b) = ", (a * b) }'

$ awk 'BEGIN { a = 50; b = 20; print "(a / b) = ", (a / b) }'

$ awk 'BEGIN { a = 50; b = 20; print "(a % b) = ", (a % b) }'

增减运算符
        前自增:先自增,后赋值;前自减:先自减,后赋值
        后自增:先赋值,后自增;后自减:先赋值,后自减
        $ awk 'BEGIN { a = 10; b = ++a; printf "a = %d, b = %d\n", a, b }'

$ awk 'BEGIN { a = 10; b = --a; printf "a = %d, b = %d\n", a, b }'

$ awk 'BEGIN { a = 10; b = a++; printf "a = %d, b = %d\n", a, b }'

$ awk 'BEGIN { a = 10; b = a--; printf "a = %d, b = %d\n", a, b }'
    
    赋值操作符
        awk 'BEGIN' { NAME = "Jerry"; print "my name is ",NAME}
        
    关系操作符
        ==
        !=
        <
        <=
        >
        >=
        
        例:awk 'BEGIN{ a=10;b=10;if(a==b) print "a == b"}
        
    逻辑操作符
        与或非
        &&、||、!
        
        例:awk 'BEGIN{
                num=5;if(num>4 && num<6) printf "%d is in octal format\n",num}'
                
    三元操作符
        pattern?pattern:pattern
            例:awk 'BEGIN{ a=10;b=20;(a>b)?max=a:max=b;print "max=" max}'
            
    正则表达式操作符
        匹配:~
        不匹配:!~
        
        例:tail -n 40 /var/log/nignx/access.log | awk '$0 ~ /ip\[123\.0\.0\.1\]/'
        
    数组
        语法:array_name[index]=value
            
        删除数组
            delete fruits["orange"]
            
        例:awk 'BEGIN{
                arr[0] =1;arr[1]=2;arr[2]=3';for (i in arr) printf"arr[%d] = %d\n",i,arr[i]
                }'
        
流程控制
    if(condition)
        action
        
    if(condition){
        action-1
        action-2
        ....
        action-n
        }
            
    if(condition)
        action-1
    else if(conditon2)
        action-2
    else
        action-3
        
    例: awk 'BEGIN {
            a = 30;
            if (a==10)
                print "a = 10";
            else if (a == 20)
                    print "a = 20";
                else if (a == 30)
                        print "a = 30";
            }'
            
循环
    主要语句
        for,while,do...while,break,continue,exit
        
    for(initialisation;condition;increment/decrement)
        {action}
        
    while (condition)
        {action}
    
    do
        {action}
    while(conditon)
    
    例:
        awk 'BEGIN{
            sum=0;for(i=0;i<20;++i) {sum+=i;if(sum>50) break;else print "sum="},sum
            }
        }'
        
        awk 'BEGIN{
            for (i=1;i<=20;++i) {
                if (i % 2 ==) print i;else continue
            }
        }'
        
        awk 'BEGIN{
            sum=0;for(i=0;i<20;++i){
                sum+=i;if(sum>50) exit(10);else print "sum="sum
                }
            }'
            
双向连接
    发送数据到另一个程序,然后读取结果,需要打开一个到另外一个进程的管道
    符号:|&
        #传递并保存数据,不输出到strout
    双向管道包括from和to
        例:close(to)
        
close(expr)
    关闭管道
    
    例:BEGIN {
            cmd = "tr [a-z] [A-Z]"
            print "hello, world !!!" |& cmd
            close(cmd, "to")
            cmd |& getline out
            print out;
            close(cmd);
        }
    
getline
    读取下一行内容
    例:awk '{getline;print $0}' marks.txt
    
    getline  var < file
        从file中读取,并存储在var中
            
    command | getline var
        将命令输出保存到var中
        
        例:"date" | getline var
    
system
    用于执行指定命令并返回退出状态
    例:awk 'BEGIN{ret=system("date");print ret}'

自定义函数
    function function_name(){
        function body }
    
    例:function add(num1,num2){result=num1+num2;return result}
        BEGIN {res = add(10,20);print "10+20="res}

AWK入门的更多相关文章

  1. [转]shell awk 入门,中级,高级使用

    awk很常用,对于我们在shell中分析log和file很有好处,很实用的东西,大家一起分享学习- 作为技术支持工程师,我们最最经常的工作就是要处理文本文件,不管是什么数据库最后都可以导成文本,我们就 ...

  2. AWK入门指南

    一. AWK入门指南 Awk是一种便于使用且表达能力强的程序设计语言,可应用于各种计算和数据处理任务.本章是个入门指南,让你能够尽快地开始编写你自己的程序.第二章将描述整个语言,而剩下的章节将向你展示 ...

  3. 【Linux】AWK入门

    什么是AWK AWK是一种用于处理文本的编程语言工具,一个模式匹配程序.一个典型的示例是将数据转换成格式化的报告. 在命令行输入如下awk命令: awk -F":" '{ prin ...

  4. shell awk入门

    本文参考自 http://www.cnblogs.com/zhuyp1015/archive/2012/07/11/2586985.html awk:好用的数据处理工具 awk 也是一个非常棒的数据处 ...

  5. linux命令-awk入门

    最近经常查看nginx日志,有时候需要做一些统计分析,于是就想起了awk,学习了就顺便做一个记录. 目录 概述:简单介绍awk背景原理 基本用法:常用到的awk语法 内建变量 综合实例 概述 awk是 ...

  6. awk入门【转】

    awk其实不仅仅是工具软件,还是一种编程语言.不过,本文只介绍它的命令行用法,对于大多数场合,应该足够用了. 一.基本用法 awk的基本用法就是下面的形式. # 格式 $ awk 动作 文件名 # 示 ...

  7. awk 入门教程

    作者: 阮一峰 日期: 2018年11月 7日   awk是处理文本文件的一个应用程序,几乎所有 Linux 系统都自带这个程序. 它依次处理文件的每一行,并读取里面的每一个字段.对于日志.CSV 那 ...

  8. awk入门及进阶

    awk是Linux下优良的文本处理工具,有自成一体的编程语法规则,在循环和条件判断语句等方面和C语言很像. 其一般形式是:Pattern1 {ACTIONS; } Pattern2 { ACTIONS ...

  9. [转帖]awk 入门

    awk其实不仅仅是工具软件,还是一种编程语言.不过,本文只介绍它的命令行用法,对于大多数场合,应该足够用了. http://www.ruanyifeng.com/blog/2018/11/awk.ht ...

随机推荐

  1. MSG结构体和WndProc窗口过程详解

    MSG结构体和WndProc窗口过程对于Windows编程非常重要,如果不了解它们,可以说就没有学会Windows编程. MSG结构体 MSG 结构体用来表示一条消息,各个字段的含义如下: typed ...

  2. Hbase伪分布式安装

    前面的文章已经讲过hadoop伪分布式安装,这里直接介绍hbase伪分布式安装. 1. 下载hbase 版本hbase 1.2.6 2. 解压hbase 3. 修改hbase-env.sh 新增如下内 ...

  3. Why Choose MB SD C5 with Engineer Software

    MB SD C5 with engineer software performed good and now is released. Unlike the old clone C5 which us ...

  4. 1、Kafka介绍

    1.Kafka介绍 1)在流式计算中,Kafka一般用来缓存数据,Storm通过消费Kafka的数据进行计算. 2)Kafka是一个分布式消息队列. 3)Kafka对消息保存时根据Topic进行归类, ...

  5. Spring 学习——Spring注解——Autowiring(自动装配)

    装配方式 方式一:默认 方式二:byName:根据属性名称自动装配.会查找Bean容器内部所有初始化的与属性名成相同的Bean,自动装配.(需要通过set方法注入,注入Bean的id名称需要和实体类的 ...

  6. vue 项目 使用sass

    1,使用save会在package.json中自动添加. npm install node-sass --save-dev npm install sass-loader --save-dev 注: ...

  7. Jupyter Notebook插入图片的4种方法

    来自:https://blog.csdn.net/qq_33039859/article/details/78507316 方法1: ![title](img/python.png) Markdown ...

  8. apache kafka技术分享系列(目录索引)

    https://blog.csdn.net/lizhitao/article/details/39499283 https://blog.csdn.net/lizhitao

  9. [转]静态库、动态库,dll文件、lib文件,隐式链接、显式链接

    转自:https://blog.csdn.net/dcrmg/article/details/53427181 静态链接.动态链接 静态库和动态库分别应用在静态链接方式和动态链接方式中,所谓静态链接方 ...

  10. 最接近的三数之和(java实现)

    题目: 给定一个包括 n 个整数的数组 nums 和 一个目标值 target.找出 nums 中的三个整数,使得它们的和与 target 最接近.返回这三个数的和.假定每组输入只存在唯一答案. 例如 ...