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. 5.Python3程序结构

    5.1顺序结构 一条语句一条语句顺序的执行. 5.2选择结构 条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了解条件语句的执行过程: 5.2. ...

  2. 精练代码:一次Java函数式编程的重构之旅

    摘要:通过一次并发处理数据集的Java代码重构之旅,展示函数式编程如何使得代码更加精练. 难度:中级 基础知识 在开始之前,了解"高阶函数"和"泛型"这两个概念 ...

  3. TCP/IP协议详解内容总结(怒喷一口老血)

    TCP/IP协议(本文源自外部链接) TCP/IP不是一个协议,而是一个协议族的统称.里面包括IP协议.IMCP协议.TCP协议. 这里有几个需要注意的知识点: 互联网地址:也就是IP地址,一般为网络 ...

  4. 用mint-ui picker组件 实现省市区三级联动

    公司上一期项目中新增了省市区滑动三级联动效果,用的是mint-ui的picker组件和popup组件,效果如下:点击确定换地区,点击取消不变 省市区数据是后台给的(根据上一级的id,获取下一级数据列表 ...

  5. HDU 4010 Query on The Trees(动态树)

    题意 给定一棵 \(n\) 个节点的树,每个点有点权.完成 \(m\) 个操作,操作四两种,连接 \((x,y)\) :提 \(x\) 为根,并断 \(y\) 与它的父节点:增加路径 \((x,y)\ ...

  6. loj#3 -Copycat

    原题链接:https://loj.ac/problem/3 题目描述: --- Copycat 内存限制:256 MiB 时间限制:1000 ms 输入文件: copycat.in 输出文件: cop ...

  7. 微信小程序开发学习记录

    两天撸了一遍小程序的文档,跟网页相似,个人感觉是简化版.但是因为开放了很多微信自带的接口又使得部分功能开发起来相对方便 思维导图如下: 目前我的理解大概是这么个逻辑,以后深入学习后可能会有更改 跟着大 ...

  8. 使用 R 语言挖掘 QQ 群聊天记录

    1.获取数据 从 QQ 消息管理器中导出消息记录,保存的文本类型选择 txt 文件.这里获取的是某群从 2016-04-18 到 2016-05-07 期间的聊天记录,记录样本如下所示. 消息记录(此 ...

  9. 腾讯云服务器突然远程连不上(包含ssh,拒绝访问)

    版权声明:本文转载自  https://blog.csdn.net/Alexwu555/article/details/78448113, 暂时这样 , 以后再来整理.不太习惯不能直接贴截图啊 配置安 ...

  10. Angular2 EventEmitter

    可能你对EventEmitter还不太熟悉,不过别担心,它并不难.EventEmitter只是一个帮你实现观察者模式①的对象.也就是说,它是一个管理一系列订阅者并向其发布事件的对象.就是这么简单.来看 ...