文本三剑客 awk

1. 工作原理:

        逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。
        sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”然后再进行处理。awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。在使用awk命令的过程中,可以使用逻辑操作符“&&”表示“与”、“||”表示“或”、“!”表示“非”;还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方。

说明:

program通常是被放在单引号中,并可以由三种部分组成

  • BEGIN语句块

  • 模式匹配的通用语句块

  • END语句块

常见选项:
  • -F “分隔符” 指明输入时用到的字段分隔符,默认的分隔符是若干个连续空白符

  • -v var=value 变量赋值

2. 格式:

awk 选项 '模式或条件 {操作}' 文件 1 文件 2 …
awk -f 脚本文件 文件 1 文件 2 …

第一步:执行BEGIN{action;… }语句块中的语句
第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ action;… }语句块,它逐行扫描文件,
从第一行到最后一行重复这个过程,直到文件全部被读取完毕。
第三步:当读至输入流末尾时,执行END{action;…}语句块
BEGIN语句块在awk开始从输入流中读取行之前被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中
END语句块在awk从输入流中读取完所有的行之后即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块
pattern语句块中的通用命令是最重要的部分,也是可选的。如果没有提供pattern语句块,则默认执行{ print },即打印每一个读取到的行,awk读取的每一行都会执行该语句块

3. 常见的内建变量:

  • FS :指定每行文本的字段分隔符,缺省默认为空格或制表符(tab)。与 “-F”作用相同 -v "FS=:"

  • OFS:输出时的分隔符

  • NF:当前处理的行的字段个数

  • NR:当前处理的行的行号(序数)

  • $0:当前处理的行的整行内容

  • $n:当前处理行的第n个字段(第n列)

  • FILENAME:被处理的文件名

  • RS:行分隔符。awk从文件上读取资料时,将根据RS的定义就把资料切割成许多条记录,而awk一次仅读入一条记录进行处理。预设值是\n

4.line ranges:行范围

不支持使用行号,但是可以使用变量NR 间接指定行号加上比较操作符 或者逻辑关系

算术操作符
x+y, x-y, x*y, x/y, x^y, x%y
-x:转换为负数
+x:将字符串转换为数值
比较操作符:
==, !=, >, >=, <, <=
#####逻辑
与:&&,并且关系
或:||,或者关系
非:!,取反
模式匹配符:
~ 左边是否和右边匹配,包含关系
!~ 是否不匹配

5. 基本用法:

5.1 输出所有内容

5.2 打印其中一列

5.3 打印字符串需要加双引号

5.4 内置变量

0 和 1 放置 {} 前,能够起到限制的作用(默认为“1”

0是不允许打印读入的内容,1是允许打印的内容

打印行和行号

$0:当前处理的行的整行内容

输出第 1~3 行内容

输出第 1 行,第 3 行内容

输出以 root 开头的行

输出以 nologin 结尾的行

输出所有奇数行的内容

5.5 BEGIN

5.6 END

5.7 找到10:00 到 11:00 之间的日志

awk      '/10/,/11/'        文件名

5.8 关系表达式(扩展)

关系表达式结果为“真”才会被处理

真:结果为非0值,非空字符串

假:结果为空字符串或0值

5.9 条件判断 (扩展)

awk 选项 '模式 {actions}'

条件判断写在 actions里

6. 案例

6.1 提取下面的字段中的 IP地址和时间

58.87.87.99 - - [09/Jun/2020:03:42:43 +0800] "POST /wp-cron.php?doing_wp_cron=1591645363.2316548824310302734375 HTTP/1.1" ""sendfileon
128.14.209.154 - - [09/Jun/2020:03:42:43 +0800] "GET / HTTP/1.1" ""sendfileon
64.90.40.100 - - [09/Jun/2020:03:43:11 +0800] "GET /wp-login.php HTTP/1.1"""sendfileo

6.2 提取host.txt主机名后再放回host.txt文件

1 www.kgc.com
2 mail.kgc.com
3 ftp.kgc.com
4 linux.kgc.com
5 blog.kgc.com

6.3 统计/etc/fstab文件中每个文件系统类型出现的次数

6.4 统计/etc/fstab文件中每个真单词出现的次数

6.5 提取出字符串Yd$C@M05MB%9&Bdh7dq+YVixp3vpw中的所有数字

6.6 查出/tmp/的权限,以数字方式显示

6.7 查出用户UID最大值的用户名、UID及shell类型

​​​​​​​

相关推荐

  1. Linux文本剑客awk经典案例

    2024-03-14 20:26:03       62 阅读
  2. Linux下文本剑客:grep、awk、sed之对比

    2024-03-14 20:26:03       61 阅读
  3. Linux 文本处理剑客:grep、sed 和 awk

    2024-03-14 20:26:03       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-14 20:26:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-14 20:26:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-14 20:26:03       82 阅读
  4. Python语言-面向对象

    2024-03-14 20:26:03       91 阅读

热门阅读

  1. C语言(循环)单元练习

    2024-03-14 20:26:03       31 阅读
  2. TCP网络通信-在C#/Unity中的知识点

    2024-03-14 20:26:03       44 阅读
  3. Nmap常用的一些参数

    2024-03-14 20:26:03       41 阅读
  4. linux Shell 命令行-09-redirect 重定向

    2024-03-14 20:26:03       34 阅读
  5. webpack5基础--10_处理 js 资源

    2024-03-14 20:26:03       34 阅读
  6. 如何计算视频流需要的服务器带宽

    2024-03-14 20:26:03       37 阅读