首页 > 编程笔记 > Linux笔记

Linux awk命令:对文本和数据进行处理的编程语言

awk 命令来自三位创始人 Alfred Aho、Peter Weinberger、Brian Kernighan 的姓氏缩写,其功能是对文本和数据进行处理。

使用 awk 命令可以让用户自定义函数或正则表达式,对文本内容进行高效管理,awk 与 sedgrep 并称为 Linux 系统中的“文本三剑客”。

Linux awk 命令语法格式:

awk 参数 文件名


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

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

参考示例

1) 仅显示指定文件中第 1、2 列的内容(默认以空格为间隔符):
[root@54benniao ~]# awk '{print $1,$2}' File.cfg
#version=RHEL8
ignoredisk --only-use=sda
autopart --type=lvm
# Partition
clearpart --none
………………省略部分输出信息………………

2) 以冒号为间隔符,仅显示指定文件中第1列的内容:
[root@54benniao ~]# awk -F : '{print $1}' /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
………………省略部分输出信息………………

3) 以冒号为间隔符,显示系统中所有 UID 号码大于 500 的用户信息(第3列):
[root@54benniao ~]# 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
………………省略部分输出信息………………

4) 仅显示指定文件中含有指定关键词 root 的内容:
[root@54benniao ~]# awk '/root/{print}' File.cfg
rootpw --iscrypted $6$n9sZuTcY8Yzk4l.Q$LsuMNAROewyx.LomDtPpL9iJIOD3tsRThnzsAGE0hZX LMtdVCHVQ3pxzm3El8K2kuhcYLXJnhz.xUDGiE27s/1
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty

5) 以冒号为间隔符,仅显示指定文件中最后一个字段的内容:
[root@54benniao ~]# awk -F : '{print $NF}'
/etc/passwd
/bin/bash
/sbin/nologin /sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
………………省略部分输出信息………………

声明:《Linux系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。