zoukankan      html  css  js  c++  java
  • 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




  • 相关阅读:
    【面积并】 Atlantis
    【动态前k大 贪心】 Gone Fishing
    【复杂枚举】 library
    【双端队列bfs 网格图建图】拯救大兵瑞恩
    【奇偶传递关系 边带权】 奇偶游戏
    【权值并查集】 supermarket
    CF w4d3 A. Pythagorean Theorem II
    CF w4d2 C. Purification
    CF w4d2 B. Road Construction
    CF w4d2 A. Cakeminator
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5151142.html
Copyright © 2011-2022 走看看