我们都知道awk是专门为文本处理设计的编程语言,也是一个应用程序,几乎所有Linux发行版本都自带这个程序。我们通常用它进行数据扫描、过滤、统计汇总工作。本文只介绍awk的命令行用法,对于大多数场合,应该足够用了。
awk 命令的基本格式如下:
awk ‘条件1 {动作 1} 条件 2 {动作 2} …’ 文件名
awk语法由一系列条件和动作组成,在花括号内可以多个动作,在多个动作之间是有分号分隔,在多个条件和动作之间可以有若干空格,也可以没有。
内置变量
我们先来学习 awk 的基本用法,也就是只看看格式化输出动作是干什么的。
在终端上输入 free
查看内存
那如果我们打印第三列的话,可以使用free | awk '{print $3}'
可以看到free输出三行内容,awk是逐行处理工具。如果匹配成功则执行print $3 这个动作。有些朋友会问,print $3 这个动作这个动作只写一次,为什么执行多次呢?awk隐藏了循环,条件匹配多次,动作就会被执行多少次。
打印文本内容
text.txt
hello world
this is test
C C++ python go
awk内置变量NR为当前的行号,当awk隐含free命令输出的第1行时执行print NR后屏幕输出当前行号1。依次读取下去。
打印当前行行号
为什么输出行为4,原因是有换行。
awk内置变量NF为当前行的字段列数,例如 free | awk '{print NF}'
打印每行的列数
(NF-1)代表倒数第二个字段。
awk 可以通过 -v 选项设置或者修改变量,我们可以使用-v定义新的变量,也可以使用该选项修改内置变量的值
定义变量,输出变量。
因为自定义数据行字段的分隔符属于经常使用的功能,为了方便自定义字段分隔符,awk程序还替换了一个-F选项,可以直接指定数据字段的分隔符。
test.txt
hello: world
this: is: test
C: C++: python: go
定义冒号为字段分隔符
text.txt
hello world
this is test
C C++ python go
默认字段分隔符为空格
定义字段分隔符为冒号
内置变量OFS保存的是输出字段的分隔符,默认空格,而ORS保存的是输出记录的分隔符,默认为换行符\n。
使用print指令输出特定数据时,我们可以输出变量的数据,同时也还可以直接输出变量,如果是字符串常量需要使用双引号括起来,如果是数字常量则可以直接打印。
下面开始编写条件匹配案例,awk支持使用正则进行模糊匹配,也支持字符串和数字的精确匹配。还支持逻辑与和逻辑或。
text.txt
hello world
this is test
C C++ python go
在两个数据之间进行正则匹配需要使用正则比较符(~)进行匹配比较
查看head -2 /etc/passwd
文件内容,匹配第三列小于10的行。
上面的这条命令逐行精准匹配 /etc/passwd文件的第三行,如果第三行的数组小于10,则打印该行所有数据的内容。
仅显示第四行数据内容
满足两个条件,逻辑与
满足两个条件,逻辑或
查看当前登录信息
查看文件系统信息
上面的命令先通过文件系统信息,使用tail -n + 2可以从第2行开始显示文件系统信息,这样就可以把不包含的数据的标题行去除,awk每读取一行数据就执行一次 sum+=$4,sum变量没有初始化定义,因此初始化值为0,而df输出的每行第四列为剩余容量。总结awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。
本篇快速了解awk相关知识点,相对比较粗糙,我是参考awk的man手册以及Linux Shell 核心编程指南总结而成的,相信本篇文章可以让大家对awk有一个大致的了解,欢迎大家一起交流。参考:Linux Shell 核心编程指南
Linux下使用md5sum计算和检验MD5码
Linux下抓包神器 tcpdump 使用介绍
Linux中是如何删除特殊名称文件
快速了解Linux上gcc编译器
Linux如何查看文件打开情况
linux C 命令行参数之getopt()函数的使用
不能“疏漏”的性能问题(memset)之ltrace调试
GCC编译过程(预处理->编译->汇编->链接)
欢迎关注公众号【程序猿编码】,添加本人微信号(17865354792),回复:领取学习资料。或者回复:进入技术交流群。网盘资料有如下:
写留言