目录
一、awk 工具
在Linux系统中,awk是一个功能强大的编辑工具,逐行读取输入文本,并根据指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理,可以在无交互的情况下实现相当复杂的文本操作,被广泛应用于Shell 脚本,完成各种自动化配置任务
1.awk工作原理
通常情况下 awk 所使用的命令格式如下所示,其中,单引号加上大括号“{}”用于设置对数据进行的处理动作。awk 可以直接处理目标文件,也可以通过“-f ” 读取脚本对目标文件进行处理。
前面提到 sed 命令常用于一整行的处理,而 awk 比较倾向于将一行分成多个“字段”然后再进行处理,且默认情况下字段的分隔符为空格或者 tab 键。awk 执行结果可以通过 print 的功能将字段数据打印显示。在使用awk命令的过程中,可以使用逻辑操作符“&&”,表示“与”, “||”表示“或”,“!”表示“非”;还可以进行简单的数学运算,如+、-、*、/、%、^分别 表示加、减、乘、除、取余和乘方。
2.awk命令格式
命令格式
格式1: awk 选项 ‘模式或条件’ {操作} 文件1 文件2...
格式2: awk -f 脚本文件 文件1 文件2 ...
2.1 awk内建变量
awk包含几个特殊的内建变量(可直接用)
FS:指定每行文本的字段分隔符,默认为空格或制表位
OFS:输出字段的分隔符
RS:输出行分隔符
ORS:输出行的分隔符,默认为换行符
NF:当前处理的行的字段个数
NR:当前处理的行的行号(序数)
$0:当前处理的行的整行内容
$n:当前处理行的第n个字段(第n列)
FILENAME:被处理的文件名
2.2 awk命令的用法
-F | 以XX为分隔符 |
-v | 变量赋值 |
二、awk 用法
1.awk ' ' #空没有效果
2.awk '{print}'
3.awk '{print "hello"}' #字符需要添加双引号,单引号已被使用
4.awk ‘BEKIN { print “hello”}’ #BEGIN比较特殊值打一行
5.awk ‘{print 100}’
6. awk -F: '{print "root"}' /etc/passwd 打印root,多少行=passwd里的行数
7. echo {a..b} | awk '{print $1}' #连续的空白符一样可以
8.df | awk ‘{print $5}’ #分区利用率
9.指定分隔符 打印第1 2 3列 head /etc/passwd | awk -F: '{print $1,$2,$3}'
10.指定分隔符输出第3列大于1000 awk -F: '$3>1000' /etc/passwd
11. 指定分隔符输出第3列<5的,且打印第1 3 列 awk -F: '$3<5{print $1,$3}' /etc/passwd
12. 查找本机ip ifconfig ens33 | awk '/netmask/ {print $2}'
内建变量使用
NR:表示该处理的行序号是多少
NF:表示该处理的行,有多少列
13.awk 'NR==1,NR==3{print}' passwd.bak //输出1-3行
14. awk '/^root/{print}' passwd.bak //输出以root开头的行
15. cat -n passwd.bak |awk '(NR%2==1){print}' //输出文件的奇数行
16. cat -n passwd.bak |awk '(NR%2==0){print}' //输出文件偶数行