• 【AWK】:常用总结


    单机文本数据处理,常用AWK,总结一下AWK最常用的要点,备忘备查。


    1.What is AWK
    (1)Aho、Weinberger、Kernighan三位发明者名字首字母;
    (2)一个行文本处理工具;


    2.How to use AWK
    2.1 处理方式:逐行处理文件中的数据

    2.2语法

     

    awk 'pattern + {action}'

    说明:
    (1)单引号''是为了和shell命令区分开;
    (2)大括号{}表示一个命令分组;
    (3)pattern是一个过滤器,表示命中pattern的行才进行action处理;
    (4)action是处理动作;
    (5)使用#作注释;


    例子:显示hello.txt中的第3行至第5行

     

    cat hello.txt | awk 'NR==3, NR==5{print;}'

    2.3pattern说明
    pattern参数可以是egrep正则表达式中的一个,正则表达式使用/pattern/
    例子:显示hello.txt中,正则匹配hello的行

     

    cat hello.txt | awk '/hello/'

    说明:
    (1)pattern和action可以只有其一,但不能两者都没有;
    (2)默认的action是print;
    例子:显示hello.txt中,长度大于100的行号

     

    cat hello.txt | awk 'length($0)>80{print NR}'


    3.内置变量
    FS 分隔符,默认是空格
    NR 当前行数,从1开始
    NF 当前记录字段个数
    $0 当前记录
    $1~$n 当前记录第n个字段
    例子:显示hello.txt中的第3行至第5行的第一列与最后一列

     

    cat hello.txt | awk 'NR==3, NR==5{print $1,$NF}'


    4.内置函数
    gsub(r,s):在$0中用s代替r
    index(s,t):返回s中t的第一个位置
    length(s):s的长度
    match(s,r):s是否匹配r
    split(s,a,fs):在fs上将s分成序列a
    substr(s,p):返回s从p开始的子串


    5.操作符
    5.1运算符
    类似于c,支持+、-、*、/、%、++、–、+=、-=等诸多操作;

    5.2判断符
    类似于c,支持==、!=、>、=>、~(匹配于)等诸多判断操作;


    6.控制流程
    6.1.BEGIN和END
    BEGIN和END本质是一个pattern。
    BEGIN用于awk程序开始开始前,做一些初始化的工作;
    END用于awk程序结束前,做一些收尾的工作。
    例子:统计字符个数

     

    awk '

    BEGIN

    {

    count=0;

    }

    {

    count+=length($0);

    }

    END

    {

    print count;

    }'

    6.2流程控制语句
    (1)if(condition){}else{}
    (2)while{}
    (3)do{}while(condition);
    (4)for(init;condition;step){}
    (5)break/continue:如果有END,会执行END中的收尾工作
    个流程控制语句用法几乎与c相同。


    7.awk与shell的交互
    (1)awk中使用shell中定义的变量:使用单引号即可;

     

    #!/bin/bash

    STR="hello"

    echo | awk '{

    print "'${STR}'";

    }'

    (2)awk中使用shell命令:使用双引号,或者system命令;

     

    #!/bin/bash

    echo hello | awk '{

    print $0 | "cat"

    }'

    或者

     

    #!/bin/bash

    echo | awk '{

    system("date > date.txt")

    }'

    (3)awk中的变量传出至shell:用文件;
    (4)getline:awk里,从文件中读取变量到awk中

    #!/bin/bash
    
    echo | awk '{
    
    while(getline < "date.txt")
    
    {
    
    print $0;
    
    }
    
    }'

    8.举个栗子

    netstat -n|awk '/^tcp/{++Array[$NF]} END {for(i in Array) print i,Array[i]}'

    说明:

    $NF是指的最后一列值,以该值做数组S索引,相同索引就累计

    END 结束后

    循环遍历打印一下 a,S[a]的关系 

  • 相关阅读:
    acdream 瑶瑶带你玩激光坦克 (模拟)
    acdream 小晴天老师系列——苹果大丰收(DP)
    acdream 小晴天老师系列——晴天的后花园 (暴力+剪枝)
    acdream 小晴天老师系列——竖式乘法(简单穷举)
    acdream LCM Challenge (最小公倍数)
    LeetCode Product of Array Except Self (除自身外序列之积)
    LeetCode Implement Trie (Prefix Tree) (实现trie树3个函数:插入,查找,前缀)
    字节流与字符流的区别
    oop第二章1知识点汇总
    抽象类和抽象方法的一些概念(转自百度)
  • 原文地址:https://www.cnblogs.com/wwcom123/p/10459899.html
Copyright © 2020-2023  润新知