awk是一个文本处理工具,通常用于处理数据并生成结果报告,
awk的命名是它的创始人 Alfred Aho、Peter Weinberger和Brian Kernighan 姓氏的首个字母组成的。
awk的工作模式

语法格式
第一种形式: 基于文件
awk ‘BEGIN{}pattern{commands}END{}‘ file_name
第二种形式: 基于标准命令格式
standard output | awk ‘BEGIN{}pattern{commands}END{}‘
语法格式说明

内置变量对照表


内置变量:
$0 打印行所有信息
$1~$n 打印行的第1到n个字段信息
NF Number Field 处理行的字段个数
NR Number Row 处理行的行号
FNR File Number Row 多文件处理时,每个文件单独记录行号
FS Field Separator 字段分隔符,不指定时默认以空格或tab键分割
RS Row Separator 行分隔符,不指定时以回车换行分割
OFS Output Filed Separator 输出字段分隔符
ORS Output Row Separator 输出行分隔符
FILENAME 处理文件的文件名
ARGC 命令行参数个数
ARGV 命令行参数数组
输出整行数据
awk ‘{print $0}‘ passwd

FS指定分隔符为 : 输出所有行第一个字段
awk ‘BEGIN{FS=":"}{print $1}‘ passwd

默认以空格或者tab为分隔符
list
Hadoop Spark Flume Java Python Scala Allen Mike Meggie
以空格为分隔符, 输出第一个字段
awk ‘BEGIN{FS=" "}{print $1}‘ list

NF 输出每一行的字段个数
awk ‘{print NF}‘ list

NR 输出行号,处理多个文件(list,passwd,/etc/fstab) 时行号累加
awk ‘{print NR}‘ list passwd /etc/fstab

FNR在处理两个文件以上时会单独计数
awk ‘{print FNR}‘ list /etc/fstab

list
Hadoop|Spark:Flume Java|Python:Scala:Golang Allen|Mike:Meggie
以 | 符号分隔列, 输出第二个字段

以 : 符号分隔列
awk ‘BEGIN{FS=":"}{print $2}‘ list

list
Hadoop|Spark|Flume--Java|Python|Scala|Golang--Allen|Mike|Meggie
RS 指定行分隔符: --
awk ‘BEGIN{RS="--"}{print $0}‘ list

awk ‘BEGIN{RS="--";FS="|"}{print $3}‘ list

ORS输出分隔符,以&连接各输出行
awk ‘BEGIN{RS="--";FS="|";ORS="&"}{print $3}‘ list

字段默认分隔符是空格
awk ‘BEGIN{RS="--";FS="|";ORS="&"}{print $1,$3}‘ list

OFS 指定字段分隔符为 :
awk ‘BEGIN{RS="--";FS="|";ORS="&";OFS=":"}{print $1,$3}‘ list

FILENAME 文件名
awk ‘{print FILENAME}‘ list

list
Hadoop|Spark|Flume--Java|Python|Scala|Golang--Allen|Mike|Meggie Test File Line
输出3次文件名list,是因为没有输入匹配模式 awk默认是行处理,文本有3行,处理三次会有3次输出
awk ‘{print FILENAME}‘ list

ARGC命令行参数个数 awk 和 list 共链各个参数
awk ‘{print ARGC}‘ list

awk ‘{print ARGC}‘ list /etc/fstab 这样的话就是 3 个参数

NF表示字段个数,NF=7 $NF表示字段的个数一般来显示最后一个字段
awk ‘BEGIN{FS=":"}{print $NF}‘ passwd

原文:https://www.cnblogs.com/crazymagic/p/11148894.html