Linux常用命令--awk
摘要
-
awk命令使用说明
-
本文基于
CentOS8(x86_64)
awk
-
awk是一个强大的文本分析工具,在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
-
语法
1 | 格式:awk [-F field-separator] 'commands' input-file(s) |
-
commands的格式:
匹配规则{执行命令}
-
默认情况下,awk 会将如下变量分配给它在文本行中发现的数据字段:
$0 代表整个文本行;
$1 代表文本行中的第 1 个数据字段;
2 代表文本行中的第 2 个数据字段; n 代表文本行中的第 n 个数据字段。
小贴士
awk
是一种编程语言,它有好几种实现(解释器),常见的如awk
、nawk
、mawk
、gawk
,
CentOS、Ubuntu等常用的Linux系统下awk的默认实现就是gawk
。
功能参数
1 | 功能参数 解释 |
-
示例
1 | # 只是显示/etc/passwd的账户 |
awk内置变量
-
内置变量使用时不需要$前缀
1 | ARGC 命令行参数个数 |
1 | # 匹配包含root的行,并且打印行号,这里$NF 含以为:因为分隔后有7个字段,所有NF为7,$NF表示 $7 ,也就是打印第7个字段,即$NF表示打印最后一个字段 |
print和printf
- awk中同时提供了print和printf两种打印输出的函数。
- 其中print函数的参数可以是变量、数值或者字符串。字符串必须用双引号引用,参数用逗号分隔。如果没有逗号,参数就串联在一起而无法区分。这里,逗号的作用与输出文件的分隔符的作用是一样的,只是后者是空格而已。
- printf函数,其用法和c语言中printf基本相似,可以格式化字符串,输出复杂时,printf更加好用,代码更易懂。
1 | %s : 字符串 |
awk编程
基础语句
-
BEGIN {} {} END{}
1 | # count是自定义变量。之前的action{}里都是只有一个print,其实print只是一个语句,而action{}可以有多个语句,以;号隔开。 |
条件语句
-
awk中的条件语句是从C语言中借鉴来的,见如下声明方式:
1 | # a |
-
示例
1 | # 1.检测系统中UID为0的用户 |
aws数组
-
awk中的数组用来从记录中收集信息,可以用于计算总和、统计单词以及跟踪模板被匹配的次数等等
1 | awk -F ':' 'BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i = 0; i < NR; i++){print i, name[i]}}' /etc/passwd |
aws循环语句
-
awk中的循环语句同样借鉴于C语言,支持while、do/while、for、break、continue,这些关键字的语义和C语言中的语义完全相同,感兴趣的自行查阅,这里不再赘述。