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. dart之旅(一)

    前言 最近在看 dart 了,本着 "纸上得来终觉浅,绝知此事 markdown" 的原则,准备边学边写,写一个系列,这是第一篇.学习过程中主要是参考 A Tour of the ...

  2. 私服仓库 nexus 环境搭建(win10)

    1.1 简介: Nexus 是Maven仓库管理器,如果你使用Maven,你可以从Maven中央仓库 下载所需要的构件(artifact),但这通常不是一个好的做法,你应该在本地架设一个Maven仓库 ...

  3. python3中的range函数返回的是列表吗?

    注意,这里说的Python3里面的range函数,和Python2是不同的,返回的不是列表,是可迭代对象. 在python3中,如果执行下面的语句 print(range(10)) 得到结果是 ran ...

  4. Ubuntu编译安装最新的webkit

    好久都没更新webkit 源码在ubuntu上编译了,网上搜了一下,基本上都是早期编译的webkit版本.可能是大家都去搞高大上的谷歌浏览器了吧. 今天就以ubuntu14.04版本作为编译环境来讲讲 ...

  5. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十五):系统服务监控

    系统服务监控 新建监控工程 新建Spring Boot项目,取名 kitty-monitor,结构如下. 添加项目依赖 添加 spring boot admin 的相关依赖. pom.xml < ...

  6. 微信小程序 - 入门指引

    稍微整了整微信小程序,还是有不少问题的,做个小总结吧 和以往一样,本次项目也放到了 Github 中,欢迎围观 star ~ 一.微信公众平台 - 小程序后台 1.申请小程序账号 官网注册 注册时所用 ...

  7. varnish实践

    一.实验环境: 1.软件版本: 系统版本:CentOS Linux release 7.4.1708 (Core) php版本:PHP 7.2 nginx版本:nginx-1.12.2 数据库版本:M ...

  8. Ado.Net实体数据模型EF,如何在代码中添加数据库连接密码

    在创建EF模型的时候,VS2013提示说“在连接字符串中存储敏感数据可能有安全风险”,于是我选择了在代码中添加,可是如何通过代码添加呢? 我在网上百度了下,没有人说的清楚直观. 假设我们创建了一个名字 ...

  9. link rel=alternate网站换肤功能

    此方法借助HTML rel属性的alternate属性值实现. <link href="reset.css" rel="stylesheet" type= ...

  10. windows上使用tensorboard

    因为我的环境变量设置的不是python3.5,所以走了一些弯路. 启动tensorboard后,graphs里总是什么都没有 最后再stackoverflow里找到答案 https://stackov ...