awk 文本处理工具三剑客

一、什么是awk

1.1 awk 基本概念

awk(语言): 读取一行处理一行

 是一个功能强大的编辑工具,逐行读取输入文本,默认以空格或tab键作为分隔符作为分隔,并按模式或者条件执行编辑命令。而awk比较倾向于将一行分成多个字段然后进行处理。AWK信息的读入也是逐行。

1.2 awk的格式

awk [选项] ‘模式条件{操作}’ 文件1 文件2...
awk -f|-v 脚本文件 文件1 文件.....

1.3 工作原理

前面提到 sed 命令常用于一整行的处理,而 awk 比较倾向于将一行分成多个“字段”然后再进行处理,且默认情况下字段的分隔符为空格或 tab 键。awk 执行结果可以通过 print 的功能将字段数据打印显示。

第一步:执行BEGIN{action;… }语句块中的语句
第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ action;… }语句块,它逐行扫描文件,
从第一行到最后一行重复这个过程,直到文件全部被读取完毕。
第三步:当读至输入流末尾时,执行END{action;…}语句块

1.4 awk 常见的内置变量

FS∶ 列分割符。指定每行文本的字段分隔符,默认为空格或制表位。与"-F"作用相同

NF∶ 当前处理的行的字段个数。

NR∶ 当前处理的行的行号(序数)。

$0∶当前处理的行的整行内容。

$n∶ 当前处理行的第n个字段(第n列)。

FILENAME∶ 被处理的文件名。

RS∶ 行分隔符。awk从文件上读取资料时,将根据RS的定义把资料切割成许多条记录,而awk一次仅读入一条记录,以进行处理。预设值是’\n’

$NF:最后一段

$(NF-1):倒数第二段

二、awk相关实例

awk 文本处理工具三剑客_第1张图片

awk 文本处理工具三剑客_第2张图片

begin 换成 end  同理

ifconfig ens33|sed -n '2p'|awk '{print $2}'

ifconfig ens33 |awk 'NR==2{print $2}'

$n,代表提取第几列

NR∶ 当前处理的行的行号(序数)

awk 文本处理工具三剑客_第3张图片

2.1 打印磁盘已经使用情况,去除 %

awk 文本处理工具三剑客_第4张图片

awk 文本处理工具三剑客_第5张图片

2.2 取出文本中的ip地址及时间

awk 文本处理工具三剑客_第6张图片

awk 文本处理工具三剑客_第7张图片

三、 NF:当前处理行的整行内容    NR:当前处理行的行号

3.1 当前处理的行的字段个数

awk 文本处理工具三剑客_第8张图片

awk 文本处理工具三剑客_第9张图片

awk 文本处理工具三剑客_第10张图片

3.2 当前处理的行的行号

#NR写在后面则在后面显示行号
#awk  -F: '{print $1,NR}' /etc/passwd
root 1
bin 2
daemon 3
adm 4
lp 5
sync 6
shutdown 7
halt 8
 
#可以用制表符
awk  -F: '{print $1"\t"NR}' /etc/passwd
root    1
bin      2
daemon    3
adm      4
lp        5
 
#NR写在前面则在前面显示行号
awk  -F: '{print NR"\t"$1}' /etc/passwd
1    root
2    bin
3    daemon
4    adm
5    lp

3.3 NR==n代表行号等于什么

3.4 NR%2==0取偶数行

awk 文本处理工具三剑客_第11张图片

3.5 NR%2==1取奇数行

awk 文本处理工具三剑客_第12张图片

3.6 NR==1,NR==4取区间行

awk 文本处理工具三剑客_第13张图片

3.7 取UID数值范围$n>1000

#取uid大于1000的行
awk -F: '$3>1000 {print}' /etc/passwd
 
#取uid大于等于1000的行
awk -F: '$3>=1000 {print}' /etc/passwd

你可能感兴趣的:(linux,运维,服务器)