本博文目录索引
[TOC]
一, 初识 awk
(一)什么是 awk?
awk, 全称: Aho Weinberger Kernighan
是一个报告生成器, 用于格式化文本输出
(二)awk 能做什么?
1, 主要功能: 格式化显示文档, 或者打印报表
2, 将给定的文本内容按照工程师想要的格式输出显示, 或者打印成报表格式
3, 日常用途: 处理各种文档(比如日志信息), 从中分析挖掘出工程师关心的必要数据, 并且打印成报表
(三)CentOS7 系统中的 awk
1,gawk
在 CentOS7(或者 CentOS6)系统中, 使用 GNU 项目组开发的 gawk 来实现 awk 的功能
Gawk is the GNU Project's implementation of the AWK programming language.
2,awk 是一个软链接, 指向 gawk
[root@Alvin ~]# ll /usr/bin/awk
软链接:/usr/bin/awk
真身:/usr/bin/gawk
- STDOUT:
- lrwxrwxrwx. 1 root 4 Mar 28 01:54 /usr/bin/awk -> gawk
(四)awk 的基本语法
1, 第一种语法格式
awk [options] 'program' var=VALUE /PATH/TO/SOMEFILE...
(1)options: 选项
(2)program: 程序, 使用 awk 语言, 用单引号 '' 引起来
相对比较复杂, 需要根据生产需求的逻辑关系编写 awk 程序代码, 从而实现特定功能
2, 第二种语法格式
awk [options] -f programFile var=VALUE /PATH/TO/SOMEFILE...
(1)-f programFile: 将逻辑复杂的 awk 程序代码放在 programFile 程序文件中, 用 -f 调用 awk 程序文件
3, 第三种语法格式
awk [options] 'BEGIN{action;...}pattern{action;...}END{action;...}' /PATH/TO/SOMEFILE...
(五)awk 处理机制
1, 逐行处理
(1)会在内存中开辟一块 awk 处理文本的内存空间
(2)每一次读入文件中的一行文本到内存空间进行处理
(4)自带循环: 处理完第一行并输出, 然后再读入第二行, 以此类推
2, 切割字段
(1)可以根据指定的分隔符, 把读入的一行文本切割成若干的字段
(2)每个字段都有对应的变量来表示
变量 | 含义 |
---|---|
$0 | 读入的整行 |
$1 | 第一个字段 |
$n | 第 n 个字段 |
(3)默认的字段分隔符是 空白符 (空格, tab 键)
(4)而且个数不限, 多个连续的空白符被识别为一个空白符
(六)awk 中的行与列
1, 记录
(1)在 awk 中, 把读入的一行称为 "记录", 英文: record
(2)类似于 Excel 表的一行
(3)在 awk 中, 一般需要手动指定 "记录分隔符", 用来区分每一行
(4)默认使用 \n (回车换行符) 作为记录分隔符
2, 字段
(1)在 awk 中, 把切割后的每一列称为 "字段", 英文: field
(2)类似于 Excel 表的每一列
(3)在 awk 中, 一般需要手动指定 "字段分隔符", 用来将读入的一行文本切割成若干的字段
(4)默认使用 空白符 (空格, tab 键) 作为记录分隔符
3, 小结
通用概念 | awk 概念 | 默认分隔符 | 解释 |
---|---|---|---|
行 | 记录 | \n | 回车换行符 |
列 | 字段 | 空白符 | 空格、tab 键 |
- program:pettern{action statements;...}
- 2,pattern
- STDOUT:
- Hello AWK!
- /boot:xfs:defaults
- / data:xfs:defaults
- swap:swap:defaults
- STDOUT:
- a b
- c
- d
- f gg
- [root@Alvin ~]# awk -v FS=: '{print FNR,$1}' /etc/passwd /etc/shadow
- STDOUT:
- [root@Alvin ~]# awk '{print ARGC}' /etc/passwd
- STDOUT:
- [root@Alvin ~]# awk '{print ARGV[0],ARGV[1]}' /etc/passwd
- STDOUT:
- -v var=VALUE
- [root@Alvin ~]# awk -v var="name" 'BEGIN{print var}'
- STDOUT:
- name
- '{var=VALUE;...}'
- [root@Alvin ~]# awk 'BEGIN{var="name";print var}'
- STDOUT:
- name
- root : 0
- bin : 1
- daemon : 2
来源: http://www.bubuko.com/infodetail-2605299.html