awk:报告生成器,格式化文本输出。

我们一般使用的awk命令其实就是gawk,在centos7系统下,awk是gawk的链接文件。

基本用法:gawk [options] 'program'  FILE .......

program:PATTERN{ACTION STATEMENTS}

  STATEMENTS语句之间使用分号隔开。

  ACTION:print,printf

  options:-F:文本字段分隔符。

     -v:var=value,自定义变量。

1、print

  print item1,item2,item3...........

  要点:

    1、使用逗号来分隔各个item等,而输出时的分隔符默认为空格字符。

    2、输出的item可以是字符串,也可以是数值,当前记录的字段,变量或者awk的表达式。

    3、如省略item,相当于print $0;

演示:

2、变量,需要指定参数:-v

  2.1、内建变量

    FS:input Field Seperator:输入字段分隔符,默认为空白字符。

      如:-v FS=“[,:;]”,

    OFS:output Field Seperator:输出字段分隔符,默认为空白字符。

演示:

    RS:input Record Seperator:输入时的行分隔符,默认是换行符。

    ORS:output Record Seperator:输出时的行分隔符,默认时换行符。

演示:

所以说RS与ORS一起使用可以达到替换字符的目的。

还有一个需要注意的:

    NF:显示当前行的字段数。以行为单位进行显示。

      print NF:显示当前行的字段数。、

      print $NF:引用当前行的第NF字段的值。

    NR:行数,命令后跟的所有文件将统一合并行数

    FNR:行数,每个文件单独计算行数。

演示:

这个命令就跟下面这个命令很相似:

    

拓展:

    FILENAME:当前正被awk读取的文件的文件名;

    ARGC:awk命令中的参数的个数。

    ARGV:数组,保存了命令行参数本身。

      ARGV[index]

      ARGV[0],ARGV[1]

  2.2、自定义变量

    -v VAR_NAME=VALUE,变量名区分字符大小写。

演示:

这里的文件/etc/issue的内容没有什么用,只是用来标识文件有多少行,就显示多少个变量值。

3、printf命令

  格式化输出:printf FORMAT,item1,item2........

    (1):FORMAT必须给出。

    (2):不会字段换行,需要显式给出换行控制符,\n

    (3):FORMAT中需要分别为后面的每个item指定一个格式化符号,否则item无法显示。

    格式符:

      %c:显示单个字符

      %d或%i:显示十进制整数。

      %e:科学计数法显示数值

      %f:显示浮点数

      %s:显示字符串。

演示:

  修饰符:

     #[.#]:

        左边的#:用于指定显示的宽度。

        右边的#:显示精度。

     +:显示数值的符号

     -:左对齐显示。

演示:

4、操作符

  算数操作符:

    x+y,x-y,x*y,x/y,x^y,x%y

    -x

    +x:转换为数值。

  字符串操作符:没有符号的操作符,字符串连接。

  赋值操作符:

     =,+=,-+,*=,/=,%=,^=

      ++,--

  比较操作符:

    >,>=,<,<=,!=,==

  模式匹配符:

    ~:左侧是否能由右侧指定的模式所匹配。

    !=:左侧是否不能由右侧指定的模式所匹配。

  逻辑操作符:

    &&

    ||

    !

  函数调用:

    function_name(argu1,argu2,.......)

  条件表达式:

    selector?if-true-expression:if-false-expression

演示:

5、PATTERN

  5.1、empty:空模式,匹配每一行;

  5.2、/regular expression/:仅处理能被regular expression匹配到的行。

演示:

  5.3、relational expression:关系(比较)表达式,结果有“真”有“假”,但结果为“真”才能被awk处理。对于此处的关系表达式来讲,其结果为非0数值或非空字符串即为“真”。

用模式匹配的方法来做

  5.4、line range:行范围。

  /pat1/,/pat2/   从pat1被匹配到的那一行开始到pat2的那一行结束之间所有的行。

  注意:不支持像sed命令那样直接给出数字的格式。

演示:

NR表示统计的文件的行数,他会从1开始显示,符合要求的打印出来。

  5.5、BEGIN/END模式

    BEGIN:在文件格式化操作开始之前事先执行的一次操作,通常用于输出表头或做出一个初始化的操作。

    END:在文件格式操作完成之后,命令推出之前执行的一次操作。通常用于输出表尾或做出清理操作。

演示:

6、常用的action

  6.1、Expressions

  6.2、Control statements:if,while等。

  6.3、Compound statements:组合语句;

  6.4、input statements

  6.5、output statements

7、控制语句

  7.1、对awk取得的整行或某个字段做条件判断。

    if(condition) {statements}

    if(condition) {statements} [else {statements}]

判断哪个磁盘的使用量的百分比大于等于17%,然后将其输出并输出其使用率

  7.2、while循环

    语法:while(condition) {statements}

      条件为“真”,进入循环,条件为“假”,退出循环。

    使用场景:

      1、对一行内的多个字段逐一类似处理时使用

      2、对数组中的每个元素逐一处理

    补充:length(var):取出var变量的字符串的长度。

显示/etc/fstab中以UUID开头的行,以空格分隔,显示每个item的字符串的长度。

现在再加上一个功能,只显示item的长度大于5的item

这个while循环中再加上一个if循环,其实使用的就是C语言的方式来写的。学习好C语言,就能看懂语法了。

  7.3、do...while循环

    语法:do {statements} while(condition)

    作用:至少执行一次循环体

  7.4、for循环,

    语法:for(expr1;expr2;expr3) {statements}

    特殊用法:for (var_name in array_name) {statements}

演示:

  7.5、switch语句

   语法:switch(expression) {case VALUE1 or /REGEXP/: statement; case VALUE2 or /REGEXP2/: statement; ......; default: statement}

  7.6、break和continue

  7.7、next

   作用:提前结束对本行的处理,进入下一轮操作

演示:

  7.8、array数组

  关联数组:array[index-expression]

    index-expression:

      (1):可使用任意字符串,字符串要使用双引号。

      (2):如果某数组元素事先不存在,在引用时,awk会自动创建此元素,并将其初始化为“空串”;

        注意:若要判断数组中是否存某元素,要使用“index in array”格式进行。

        注意:var会遍历array的每个索引。

        几个常用的函数:

          数组长度:length(array)

          判断元素是否存在:if(key in array){ … }

          删除元素:delete array[key]

          删除数组:delete array

      (3)定义数组元素本身就是索引。

        可定义一个数组,用单词本身当索引,而元素的值存储单词出现的次数。

          比如:ARRAY[array_name1]++、ARRAY[array_name2]++,表示的意思是数组中的某个元素的个数自增。这个可以用在统计网站访问数量,而array_name1、array_name2则表示元素的值,并非是索引。

这个例子中,i 保存的是数组中的索引,最后那个“print weekdays[i]”是C语言中的写法,注意这个 i 一定不能加上$符号,i 自己表示索引号。这是C语言的写法。只有在C语言中引用bash的变量,需要加上$符号,比如引用print $NF的值等。var会遍历array的每个索引。

数组元素本身当索引,而元素的值存储单词的次数。(重点,要学会)

统计tcp连接中各个状态的连接个数

统计网站的访问IP次数最多的前几个

统计一个文本文件中出现的单词的次数:

第二种方法:

9、函数

  9.1、内置函数

    数值处理:

      rand():返回0和1一个随机数

    字符串处理:

      length([s]):返回指定字符串的长度。

      sub(r,s,[t]):以r表示的模式来查找t所表示的字符中的匹配的内容,并将其第一次出现替换为s所表示的内容。

      gsub(r,s,[t]):以r表示的模式来查找t所表示的字符中的匹配的内容,并将其所有出现均替换为s所表示的内容

      split(s,a[,r]):以r为分隔符切割字符s,并将切割后的结果保存至a所表示的数组中:

统计本机tcp连接中连接本主机的IP个数

  9.2、自定义函数,不讲解,自己研究。

awk实战演示的更多相关文章

  1. 特别篇:Hyper-v群集模拟实战演示

    介绍 由于前面几张的都是直接整理了下 九叔的hyper-v电子书发上来的,个人觉得他写的不是最详细,因此今天我按照自己的实际情况来写个模拟的实战演示.所有的东西都通过VMware WorkStatio ...

  2. Docker小白到实战之Dockerfile解析及实战演示,果然顺手

    前言 使用第三方镜像肯定不是学习Docker的最终目的,最想要的还是自己构建镜像:将自己的程序.文件.环境等构建成自己想要的应用镜像,方便后续部署.启动和维护:而Dockerfile就是专门做这个事的 ...

  3. (转)不看绝对后悔的Linux三剑客之awk实战精讲

    原文:http://blog.51cto.com/hujiangtao/1923930 一.Linux三剑客之awk命令精讲 第1章 awk基础入门 1.1 awk简介 awk不仅仅时linux系统中 ...

  4. Linux 三剑客之 awk 实战详解教程

    我们知道 Linux 三剑客,它们分别是:grep.sed.awk.在前边已经讲过 grep 和 sed,没看过的同学可以直接点击阅读,今天要分享的是更为强大的 awk. sed 可以实现非交互式的字 ...

  5. awk 实战

    awk 一些好玩的用法.有什么不错的点子可以留言,发挥出awk牛逼功能 分离mac地址 ifconfig wlan0 | grep eth | awk '{n=split($2,arr,": ...

  6. 实战演示疑惑 mysql insert到底加什么锁

    innodb的事务隔离级别是可重复读级别且innodb_locks_unsafe_for_binlog禁用,也就是说允许next-key lock 实验来自网上. ( 如果你没有演示出来,请check ...

  7. nginx基础配置加基础实战演示

    目录 基本配置 设置用户 工作衍生进程数 错误日志存放路径 pid文件存放路径 设置最大连接数 http->server gzip 字符编码 nginx的基本格式 实战配置 虚拟主机配置 开始配 ...

  8. shell awk实战

    一.文本处理 1.按行提取关键字频次(如取第5列) awk 'BEGIN{FS="|"} {a[$5]+=1;} END {for(i in a) print i ":& ...

  9. linux之AWK实战【转】

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAn8AAADvCAIAAAAM1SXGAAAgAElEQVR4nO2dz8s125XXHx9oTXMHUZ

随机推荐

  1. 《Kubernetes权威指南》——网络原理

    1 Kubernetes网络模型 基本原则:每个Pod都拥有一个独立IP,而且假定所有Pod都在一个可以直接连通的.扁平的网络空间中. 基于基本原则,用户不需要额外考虑如何建立Pod之间的连接,也不需 ...

  2. 动态生成二维码并利用canvas合成出一张图片(类似海报、分享页)

    在前端开发并打算推广一个APP的时候,推广页是免不了的,而推广页的展示方式一般是给人家一个二维码,让别人自己去安装APP,这样前段任务也达到了,这次写这篇文章的原因主要还是总结一下,其中有很多不完善的 ...

  3. CSS 基础:定位元素(3)<思维导图>

    这段时间利用一下间隙时间学习了CSS的基础知识,主要目的是加深对CSS的理解,虽然个人主要工作基本都是后台开发,但是个人觉得系统学习一下CSS的基础还是很有必要的.下面我学习CSS时做的思维导图(全屏 ...

  4. 从字节码层面看“HelloWorld”

    一.HelloWorld 字节码生成 众所周知,Java 程序是在 JVM 上运行的,不过 JVM 运行的其实不是 Java 语言本身,而是 Java 程序编译成的字节码文件.可能一开始 JVM 是为 ...

  5. 通过 CLI 管理 Jenkins Server

    Jenkins 内置的命令行接口允许管理员通过命令行工具访问并管理 Jenkins.这让我们可以通过脚本自动化的创建配置或执行任务,也就是把 Jenkins 中的配置代码化了.Jenkins 同时支持 ...

  6. mybatis教程5(延迟加载和缓存)

    关联关系 在关系型数据库中,表与表之间很少是独立与其他表没关系的.所以在实际开发过程中我们会碰到很多复杂的关联关系.在此我们来分析下载mybatis中怎么处理这些关系 1对1关系 我们有一张员工表(T ...

  7. Maven教程3(依赖管理)

    Maven教程2(Eclipse配置及maven项目) Maven项目,依赖,构建配置,以及构件:所有这些都是要建模和表述的对象.这些对 象通过一个名为项目对象模型(Project Object Mo ...

  8. [转]Oracle密码过期, 报:ORA-01017: 用户名/口令无效; 登录被拒绝

    本文转自:https://blog.csdn.net/jeff06143132/article/details/25696371 连接Oracle,以Oracle用户登陆:   $su - oracl ...

  9. java错误分析之junit测试错误(实验一)

    本文转自:https://www.cnblogs.com/anny0404/p/5275595.html 在原作者的基础上进行部分添加,也很感谢原作者这篇博文,帮我分析与解决问题! 原文: 下载了最新 ...

  10. 【pygame游戏编程】第一篇-----创建一个窗口

    下面我们一起来创建一个背景为蓝色的窗口作为游戏编程的开始: import sys import pygame def creat_screen(): #初始化pygame pygame.init() ...