awk:
  awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,
  awk在其对数据分析并生成报告时,显得尤为强大。
  简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
  awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。
  awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。
  实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。
  它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。

awk工作流程:
  读入有"\n"换行符分割的一条记录,然后把记录按照指定的域分隔符划分域,填充域
  $0表示所有的域,$1表示第一个域,以此类推
  默认域分隔符是空白键或者tab键

  -F:指定域分隔符
  

  cat /etc/passwd | awk -F":" '{print $1}'

  中间可以用\t来填充

  cat /etc/passwd | awk -F":" '{print $1"\t"$7}'

当有BEGIN,END时AWK工作流程:
  先执行begin,然后读取文件,读入有\n换行符分割的第一条记录,然后安装
  指定的域分隔符划分域,填充域,$0表示所有的域,$1表示第一个域,以此类推
  随后开始执行模式所对应的动作action
  最后都执行完,最后执行end操作

  cat /etc/passwd | awk -F':' 'BEGIN {print "username bash"} {print $1","$7} END {print "run over"}'

  输出内容需要用""包含,其中BEGIN,END都是关键字,必须大写

awk内置变量:
  awk中同样定义了很多内置变量,我们可以直接像使用普通变量一样使用他们,由于awk的版本众多,有些内置变量并不是得到所有awk版本的支持。

  说明:[A][N][P][G]表示支持该变量的工具,[A]=awk、[N]=nawk、[P]=POSIXawk、[G]=gawk

  $n 当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段。
  $ 这个变量包含执行过程中当前行的文本内容。
  [N] ARGC 命令行参数的数目。
  [G] ARGIND 命令行中当前文件的位置(从0开始算)。
  [N] ARGV 包含命令行参数的数组。
  [G] CONVFMT 数字转换格式(默认值为%.6g)。
  [P] ENVIRON 环境变量关联数组。
  [N] ERRNO 最后一个系统错误的描述。
  [G] FIELDWIDTHS 字段宽度列表(用空格键分隔)。
  [A] FILENAME 当前输入文件的名。
  [P] FNR 同NR,但相对于当前文件。
  [A] FS 字段分隔符(默认是任何空格)。
  [G] IGNORECASE 如果为真,则进行忽略大小写的匹配。
  [A] NF 表示字段数,在执行过程中对应于当前的字段数。
  [A] NR 表示记录数,在执行过程中对应于当前的行号。
  [A] OFMT 数字的输出格式(默认值是%.6g)。
  [A] OFS 输出字段分隔符(默认值是一个空格)。
  [A] ORS 输出记录分隔符(默认值是一个换行符)。
  [A] RS 记录分隔符(默认是一个换行符)。
  [N] RSTART 由match函数所匹配的字符串的第一个位置。
  [N] RLENGTH 由match函数所匹配的字符串的长度。
  [N] SUBSEP 数组下标分隔符(默认值是34)。

awk编程:
  变量和赋值
    print只是语句

    awk 'BEGIN {count=0} {count++;print $0} END {print "user count is ",count}' /etc/passwd

    ls -l /etc/ | grep ^- | awk 'BEGIN{size=0} {size=size+$5} END{print size}'

  条件语句:

if(expression){
statement;
statement;
......
} if(expression){
statement;
statement;
......
} else {
statement;
} if(expression){
statement;
statement;
......
} else if (expression) {
statement;
} else {
statement;
}

统计目录下文件大小,过滤掉4096(一般都是文件夹)

ls -l | awk 'BEGIN {size=0;} {if($5!=4096){size=size+$5}} END {print "size is:",size}'

循环语句:
  while循环

awk 'BEGIN {count=0;while(count<5){print count;count++;}}'

  do...while循环

awk 'BEGIN {count=0;do{print count;count++;}while(count<5)}

  for循环

awk 'BEGIN {for(count=0; count<5; count++){print count}}'

  使用数组求和,for...in循环

awk '{sum[$1]+=$2}END{for(k in sum){print k" "sum[k]}}'

awk内置函数:
  算术:

    atan2(y,x) 返回 y/x 的反正切。
    cos(x) 返回 x 的余弦;x 是弧度。
    sin(x) 返回 x 的正弦;x 是弧度。
    exp(x) 返回 x 幂函数。
    log(x) 返回 x 的自然对数。
    sqrt(x) 返回 x 平方根。
    int(x) 返回 x 的截断至整数的值。
    rand() 返回任意数字 n,其中 <= n < 。
    srand([expr]) 将 rand 函数的种子值设置为 Expr 参数的值,或如果省略 Expr 参数则使用某天的时间。返回先前的种子值。

  字符串:

    gsub(reg,str1,str2) 使用str1替换所有str2中符合正则表达式reg的子串
    sub(reg,str1,str2) 含义与gsub相同,只不过gsub是替换所有匹配,sub只替换第一个匹配
    index(str,substr) 返回substr在str中第一次出现的索引,注意索引从1开始计算,如果没有则返回0
    length(str) 返回str字符串的长度,length函数还可以返回数组元素的个数
    blength(str) 返回字符串的字节数
    match(str,reg) 与index函数一样,只不过reg使用正则表达式,例如match("hello",/lo/)
    split(str,array,reg)将str分隔成数组保存到array中,分隔使用正则reg,或者字符串都可以,返回数组长度
    tolower(str) 转换为小写
    toupper(str) 转换为大写
    substr(str,start,length) 截取字符串,从start索引开始的length个字符,如不指定length则截取到末尾,索引从1开始

  其他:

    system(command) 执行系统命令,返回退出码
    mktime( YYYY MM dd HH MM ss[ DST]) 生成时间格式
    strftime(format,timestamp) 格式化时间输出,将时间戳转换为时间字符串
    systime() 得到时间戳,返回从1970年1月1日开始到当前时间(不计闰年)的整秒数

参考:https://www.cnblogs.com/wangqiguo/p/5863266.html

linux awk详解的更多相关文章

  1. 【linux】linux命令grep + awk 详解

    linux命令grep  +  awk 详解 grep:https://www.cnblogs.com/flyor/p/6411140.html awk:https://www.cnblogs.com ...

  2. Linux命令详解之—tail命令

    tail命令也是一个非常常用的文件查看类的命令,今天就为大家介绍下Linux tail命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux tail命令主要用来从指定点开始将文 ...

  3. Linux命令详解之—less命令

    Linux下还有一个与more命令非常类似的命令--less命令,相比于more命令,less命令更加灵活强大一些,今天就给大家介绍下Linux下的less命令. 更多Linux命令详情请看:Linu ...

  4. Linux命令详解之—more命令

    Linux more命令同cat命令一样,多用来查看文件内容,本文就为大家介绍下Linux more命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux的more命令类似 ca ...

  5. 【转】linux命令详解:md5sum命令

    [转]linux命令详解:md5sum命令 转自:http://blog.itpub.net/29320885/viewspace-1710218/ 前言 在网络传输.设备之间转存.复制大文件等时,可 ...

  6. Linux命令详解之—cat命令

    cat命令的功能是连接文件或标准输入并打印,今天就为大家介绍下Linux中的cat命令. 更多Linux命令详情请看:Linux命令速查手册 Linux 的cat命令通常用来显示文件内容,也可以用来将 ...

  7. Linux命令详解之—pwd命令

    Linux的pwd命令也是一个非常常用的命令,本文为大家介绍下Linux中pwd命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux pwd命令用于显示工作目录. 执行pwd指 ...

  8. Linux命令详解之–cd命令

    cd命令是linux实际使用当中另一个非常重要的命令,本文就为大家介绍下Linux中cd命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux cd命令用于切换当前工作目录至 d ...

  9. Linux命令详解之–ls命令

    今天开始为大家介绍下Linux中常用的命令,首先给大家介绍下Linux中使用频率最高的命令--ls命令. 更多Linux命令详情请看:Linux命令速查手册 linux ls命令用于显示指定工作目录下 ...

随机推荐

  1. 直击JDD | 京东技术全景图首次展示 四大重磅智能技术驱动产业未来!

    11月19日,主题为"突破与裂变"的2019京东全球科技探索者大会(JDDiscovery)在京盛大开幕,京东集团展示了完整的技术布局与先进而丰富的对外技术服务,对外明确诠释了&q ...

  2. git子模块使用

    如下项目有多个标红的子模块 1.首先进入每个子模块目录,init初始化子模块仓库,然后提交远程. 2.在每个子目录都初始化好仓库后,进入lv-qggz主目录,只初始化该仓库,然后依次添加子模块的仓库地 ...

  3. 自动化运维工具ansible中常用模块总结

    1.yum模块: name:要操作的软件包名字,可以是一个url或者本地rpm包路径,如name=nginx update_cache:更新软件包缓存,如update_cache=yes则更新软件包缓 ...

  4. B - Common Divisors (codeforces)数论算法基本定理,唯一分解定理模板

    You are given an array aa consisting of nn integers. Your task is to say the number of such positive ...

  5. dockerfile保留字指令

    FROM 基础镜像,当前新镜像是基于哪个镜像的 MAINTAINER 镜像维护者的姓名和邮箱地址 RUN 容器构建时运行的命令 EXPOSE 当前容器对外暴露的端口 WORKDIR 指定在创建容器后, ...

  6. 瑞芯微RK3399六核-迅为3399开发板介绍

    迅为3399开发板基于瑞芯微的RK3399处理器设计,Rockchip RK3399是瑞芯微推出的一款低功耗.高性能的应用处理器芯片,该芯片基于Big.Little架构,即具有独立的NEON协同处理器 ...

  7. 干货 | 玩转云文件存储——利用CFS实现web应用的共享访问

    京东云文件服务(Cloud File Service,以下简称:CFS)是一种高可靠.可扩展.可共享访问的全托管分布式文件系统.它可在不中断应用服务的情况下,根据您对文件系统的使用,按需扩展或缩减,并 ...

  8. git 提交部分修改的文件,以及如何撤回已经add的文件

    命令 1.git status //查看修改文件状态 ,可以看到哪些add了哪些没add 注意:如果此时出现了有些文件不想添加到暂存区却添加进去了,需要撤回 git reset HEAD 全部撤销gi ...

  9. luffy课程表的创建-支付宝API-购买服务器

    课程组件 <template> <div class="course"> <Header></Header> <div cla ...

  10. 试验指标|试验单位|均方|随机模型|固定模型|字母标记法|LSR|q检验|LSD|重复值|弥补缺失数据|可加性|平方根转换|对数转换|反正弦转化

    第五章 方差分析 试验指标是什么? 就是统计的测量值,eg:身高体重 试验单位( experimental unit )是什么? 实验载体,比如一只小白鼠 均方是什么? 就是方差 随机模型的τ有何特点 ...