文本编辑器awk
- 一、 awk工作原理
- 1.命令格式
- 2.awk常见的内建变量(可直接用)如下所示
- 二、awk的基础用法
- 1.输出文件中的某一列
- 2.根据特定条件筛选数据
- 3.按照分隔符进行切割
- 4.在匹配到特定字符串时执行操作
- 5.BEGIN打印模式
- 6.awk的分隔符用法
- 三、示例演示
- 1.获取本机上一次开机时间
- 2.检测本机cpu 15分钟内的平均负载
- 3.获取本机IP地址
- 4.ssh远程登录
一、 awk工作原理
工作原理
逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令
sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”然后再进行处理。awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。在使用awk命令的过程中,可以使用逻辑操作符“&&”表示“与”、“||”表示“或”、“!”表示“非”;还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方。
1.命令格式
awk 选项 ‘模式或条件 { 操作 }’ 文件1 文件2 ......
awk -f 脚本文件 文件1 文件2 ......
2.awk常见的内建变量(可直接用)如下所示
FS:列分隔符。指定每行文本的字段分隔符,默认为空格或制表符。与“-F”作用相同
NF:当前处理的行的字段个数
NR:当前处理的行的行号(序数)
$0:当前处理的行的整行内容
$n:当前处理行的第n个文件名
FILENAME:被处理的文件名。
RS:行分隔符。awk从文件上读取资料时,将根据RS的定义把资料切割成许多条记录,而awk一次仅读入一条记录,而进行处理。预设值是’\n‘
## 3.按行输出文本,一些示例:
```cpp
awk '(print)' 文件名 #输出所有内容
awk '(print $0)' 文件名 #输出所有内容
awk 'NR==1,NR==3{print}' 文件名 #输出第1~3行内容
awk '(NR>=1)&&(NR<=3){print}' 文件名 #输出第1~3行内容
awk 'NR==1||NR==3{print}' 文件名 #输出第1行、第3行内容
awk '(NR%2)==1{print}' 文件名 #输出所有奇数行的内容
awk '(NR%2)==0{print}' 文件名 #输出所有偶数行的内容
awk '/^root/{print}' /etc/passwd #输出以root开头的行
awk '/nologin$/(print)' /etc/passwd #输出以nologin结尾的行
awk 'BEGIN{x=0};/\bin\/bash$/{x++};END{print x}' /etc/passwd #统计以/bin/bash结尾的行数,等同于 grep -c "/bin/bash$"
BEGIN模式表示,在处理指定的文本之前,需要先执行BEGIN模式中指定的动作;awk在处理指定的文本,之后再执行END模式中指定的动作,END{ }语句块中,往往会放入打印结果等语句
二、awk的基础用法
1.输出文件中的某一列
格式:awk ‘{print $n}’ 文件
2.根据特定条件筛选数据
格式:awk ‘条件 {print}’ 文件
3.按照分隔符进行切割
4.在匹配到特定字符串时执行操作
格式:awk ‘/匹配条件/ {print}’ 文件
5.BEGIN打印模式
语法格式:awk ‘BEGIN{…};{…};END{…}’ 文件
6.awk的分隔符用法
三、示例演示
1.获取本机上一次开机时间
date -d “$(awk -F “.” ‘{print $1}’ /proc/uptime) second ago” +“%F %H:%M:%S”
2.检测本机cpu 15分钟内的平均负载
uptime | awk ‘{print $NF}’
3.获取本机IP地址
ifconfig ens33|awk ‘/inet /{print $2}’