• awk命令


    1.awk工作流程


    a)先运行BEGIN。
    b)读取文件。读入有/n换行符切割的一条记录
    c)将记录按指定的域分隔符进行划分域
    d)填充域,当中$0表示全部域。$1表示第一个域,$n表示第那个域(默认域分隔符是空白键或者tab键)
    e)開始运行模式所相应的动作action
    f)接着開始读入第二条记录,直到全部的记录都被读完
    g)运行END操作


    2.用法


    awk [-F field-separator] '{pattern + action}' {filenames}
    1. pattern表示awk在数据中查找的内容,action表示在找到匹配内容时所运行的一系列命令。

    action{}能够有多个语句,以";"号隔开。

    2. [-F域分隔符]是可选的。 filenames是待处理的文件。在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下。默认的域分隔符是空格。

    3.awk内置变量


    ARGC 命令行參数个数
    ARGV 命令行參数排列
    ENVIRON 支持队列中系统环境变量的使用
    FILENAME awk浏览的文件名称
    FNR 浏览文件的记录数
    FS 设置输入域分隔符,等价于命令行 -F选项
    NF 浏览记录的域的个数
    NR 已读的记录数
    OFS 输出域分隔符
    ORS 输出记录分隔符
    RS 控制记录分隔符

    某个文件从第n行到行尾
    awk '{NR > n}' filename

    4.awk内置字符串函数


    gsub(r,s) 在整个$0中用s替代r
    gsub(r,s,t) 在整个t中用s替代r
    index(s,t) 返回s中字符串t的第一位置
    length(s) 返回s长度
    match(s,r) 測试s是否包括匹配r的字符串
    split(str,array,fs ) 在fs上将s分成序列a
    sprint(fmt,exp) 返回经fmt格式化后的exp
    sub(r,s) 用$0中最左边最长的子串取代s
    substr(s,p)     返回字符串s中从p開始的后缀部分
    substr(s,p,n)   返回字符串s中从p開始长度为n的后缀部分

    5.BEGIN和END


    BEGIN表示在处理随意行之前进行的操作
    END表示在全部输入行处理完后进行的处理。


    6.条件语句


    if (expression) {
        statement;
        statement;
        ... ...
    }
    
    if (expression) {
        statement;
    } else {
        statement2;
    }
    
    if (expression) {
        statement1;
    } else if (expression1) {
        statement2;
    } else {
        statement3;
    }

    7.数组


    由于awk中数组的下标能够是数字和字母,数组的下标通常被称为keyword(key)。值和keyword都存储在内部的一张针对key/value应用hash的表格里。由于hash不是顺序存储,因此在显示数组内容时会发现。它们并非依照你预料的顺序显示出来的。数组和变量一样,都是在使用时自己主动创建的。awk也相同会自己主动推断其存储的是数字还是字符串。一般而言。awk中的数组用来从记录中收集信息,能够用于计算总和、统计单词以及跟踪模板被匹配的次数等等。

    awk -F ':' 'BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i = 0; i < NR; i++) print i, name[i]}' /etc/passwd
    root
    daemon
    bin
    sys
    sync
    games
    ......

    awk -F' ' '{ a[$1]++ }'END'{ for(j in a) print a[j],j }' filename | sort -rn | more 
    filename的内容为:
    apple
    banana
    apple
    apple
    banana
    pear

    输出结果为:
    3 apple
    2 banana
    1 pear




  • 相关阅读:
    Mapreduce学习(一)
    Codeforces Global Round 10题解(A-D)
    八月第二周总结
    hdfs学习(三)
    Educational Codeforces Round 93 (Rated for Div. 2)题解
    hdfs学习(二)
    牛客团队赛50&CF#664(Div2)
    hdfs学习(一)
    蓝桥杯刷题(二)
    Kubernetes K8S之Pod 生命周期与postStart、preStop事件
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5151142.html
Copyright © 2020-2023  润新知