对文本和数据进行处理的编程语言
awk命令的功能是用于对文本和数据进行处理的编程语言。使用awk命令可以让用户自定义函数或正则表达式对文本内容进行高效管理,与sed、grep并称为Linux系统中的文本三剑客
语法格式:awk 参数 文件名
常用参数
-c | 使用兼容模式 |
-C | 显示版权信息 |
-e | 指定源码文件 |
-f | 从脚本中读取awk命令 |
-F | 设置输入时的字段分割符 |
-v | 自定义变量信息 |
-h | 显示帮助信息 |
-m | 对指定值进行限制 |
-n | 识别输入数据中得到八进制和十六进制数 |
-O | 启用程序优化 |
-v | 定义一个变量并赋值 |
-V | 显示版本信息 |
内置变量
变量名称 | 说明 |
ARGC | 命令行参数个数 |
ARGV | 命令行参数排列 |
ENVIRON | 支持队列中系统环境变量的使用 |
FILENAME | awk浏览的文件名 |
FNR | 浏览文件的记录数 |
FS | 设置输入域分隔符 |
NF | 浏览记录域的个数 |
NR | 已读的记录数 |
OFS | 输出域分隔符 |
ORS | 输出记录分割符 |
RS | 控制记录分割符 |
参考示例
仅显示指定文件中第1、 2列的内容(默认以空格为分割符)
[root@localhost ~]# awk '{print $2,$3}' /etc/fstab
/etc/fstab
Created by
Accessible filesystems,
See man
After editing
units generated
/ xfs
/boot xfs
none swap
以冒号为分隔符,显示第三列的内容
[root@localhost ~]# awk -F : '{print $3}' /etc/passwd
0
1
2
3
4
5
6
7
8
11
12
14
65534
81
999
193
59
998
997
996
以冒号为分隔符,显示/etc/passwd文件中所有UUID号码(第三列)大于500的用户信息
# 打印出uuid大于500的用户信息
[root@localhost ~]# awk -F : '$3 > 500' /etc/passwd
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
unbound:x:997:994:Unbound DNS resolver:/etc/unbound:/sbin/nologin
sssd:x:996:993:User for sssd:/:/sbin/nologin
rngd:x:995:992:Random Number Generator Daemon:/var/lib/rngd:/sbin/nologin
# 仅打印出uuid大于500的用户名和uuid号
[root@localhost ~]# awk -F : '$3 > 500''{print $3}' /etc/passwd
65534
999
998
997
996
995
仅显示指定文件中含有关键词root的内容
[root@localhost ~]# awk '/root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# awk '/root/{print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
以冒号为分隔符,仅显示指定文件中最后一个字段的内容:
[root@localhost ~]# awk -F : '{print $NF}' /etc/passwd
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin