awk命令来自三位创始人Alfred Aho、Peter Weinberger、Brian Kernighan的姓氏缩写,其功能是对文本和数据进行处理。使用awk命令可以让用户自定义函数或正则表达式,对文本内容进行高效管理,awk与sed、grep并称为Linux系统中的“文本三剑客”。

语法格式:awk 参数 文件名

常用参数:

-c使用兼容模式 -h显示帮助信息
-C显示版权信息-m对指定值进行限制
-e指定源码文件-n识别输入数据中的八进制和十六进制数
-f从脚本中读取awk命令-O启用程序优化
-F设置输入时的字段分隔符-v定义一个变量并赋值
-v自定义变量信息-V显示版本信息

内置变量:

ARGC命令行参数个数 NF浏览记录域的个数
ARGV命令行参数排列NR已读的记录数
ENVIRON支持在队列中使用系统环境变量OFS输出域分隔符
FILENAMEawk浏览的文件名ORS输出记录分隔符
FNR浏览文件的记录数RS控制记录分隔符
FS设置输入域分隔符  

参考示例

仅显示指定文件中第1、2列的内容(默认以空格为间隔符):

[root@linuxcool ~]# awk '{print $1,$2}' File.cfg 
#version=RHEL8
 ignoredisk --only-use=sda 
autopart --type=lvm 
# Partition 
clearpart --none
………………省略部分输出信息……………… 

以冒号为间隔符,仅显示指定文件中第1列的内容:

[root@linuxcool ~]# awk -F : '{print $1}' /etc/passwd 
root 
bin 
daemon 
adm 
lp 
sync 
shutdown
………………省略部分输出信息……………… 

以冒号为间隔符,显示系统中所有UID号码大于500的用户信息(第3列):

[root@linuxcool ~]# 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 
geoclue:x:997:995:User for geoclue:/var/lib/geoclue:/sbin/nologin 
………………省略部分输出信息……………… 

仅显示指定文件中含有指定关键词root的内容:

[root@linuxcool ~]# awk '/root/{print}' File.cfg 
rootpw --iscrypted $6$n9sZuTcY8Yzk4l.Q$LsuMNAROewyx.LomDtPpL9iJIOD3tsRThnzsAGE0hZX LMtdVCHVQ3pxzm3El8K2kuhcYLXJnhz.xUDGiE27s/1 
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty 

以冒号为间隔符,仅显示指定文件中最后一个字段的内容:

[root@linuxcool ~]# awk -F : '{print $NF}' 
/etc/passwd 
/bin/bash 
/sbin/nologin /sbin/nologin 
/sbin/nologin 
/sbin/nologin 
/bin/sync 
………………省略部分输出信息………………
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。