Linux中最重要的三个命令在业界被称为“三剑客”,它们是awk,sed,grep
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
终端输入awk --help可以看到所有的语法参数,翻译了部分,举例一些常用的实例
一、命令选项
1、-F 指定输入文件折分隔符,如-F:。
2、-v 赋值一个用户定义变量。
3、-f 从脚本文件中读取awk命令。
二、awk内置变量
awk有许多内置变量用来设置环境信息,这些变量可以被改变,下面给出了最常用的一些变量。
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FS 保存或设置字段分隔符,例如FS= ":" 与-F功能一样
RS: Record Separator,记录分隔符
ORS: Output Record Separate,输出当前记录分隔符(行分隔符)
OFS Out of Field Separator,输出字段分隔符物,其中解释了缩写的含义
$n 指定分隔的第n个字段,如 $1、$2分别表示文本的第1列、第2列依此类推
$0 文本当前行的全部内容
NR 文件当前行的行号
NF 文件当前行的列数(有几列)
三、关键调用参数
$0 表示整个当前行
$1 每行第一个字段
\t 制表符tab
\n 换行符
FS BEGIN时定义分隔符
RS 输入的记录分隔符, 默认为换行符(即文本是按一行一行输入)
~ 匹配,与==相比不是精确比较
!~ 不匹配,不精确比较
== 等于,必须全部相等,精确比较
!= 不等于,精确比较
&& 逻辑与
|| 逻辑或
+ 匹配时表示1个或1个以上
/[0-9][0-9]+/ 两个或两个以上数字
/[0-9][0-9]*/ 一个或一个以上数字
FILENAME 文件名
OFS 输出字段分隔符, 默认也是空格,可以改为制表符等
ORS 输出的记录分隔符,默认为换行符,即处理结果也是一行一行输出到屏幕
-F'[:#/]' 定义三个分隔符
比较符号:==(等于) !=(不等于) >(大于)>=(大于等于) <(小于) <=(小于等于)
四、常用实例分析,以下实例只是常用,广泛应用需要配合其他运维工具
1、最常用实例,查看系统中的用户,-F以":"为分隔符,打印第一列
2、搜索/etc/passwd有root关键字的所有行
3、显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以tab键分割,\t可以改成其他标识符
4、筛选服务器IP地址
5、提取根的空间使用率,常用于自动清理磁盘的脚本
6、打印passwd前4列内容
7、 输出其中以nologin结尾的完整记录:
8、打印passwd第三行内容
9、输出其中登录Shell不以nologin结尾(对第7个字段做!~反向匹配)的用户名、登录Shell信息
!~ 不匹配
10、输出账户UID小于5的账户名称和UID信息
11、输出账户UID大于10并且小于20的账户信息,&&与,||或
12、打印开头包含root打印出第一行和最后一行,$NF默认是最后一行