AWK

awk 常用选项与参数

Option
Description

-F

指定分隔符

awk常用的内置变量

Variable
Description

FILENAME

当前输入文件名,若有多个文件,则只表示第一个。如果输入是来自标准输入,则为空字符串

$0

当前记录的内容

$N

N表示字段号,最大值为NF变量的值

FS

字段分隔符,由正则表达式表示,默认为" "空格

RS

输入记录分隔符(换行符),默认为"\n",即一行为一个记录

NF

当前记录字段数

NR

已经读入的记录数

FNR

当前输入文件的记录数,请注意它与NR的区别

OFS

输出字段分隔符,默认为" "空格

ORS

输出记录分隔符,默认为"\n"

简单案例

awk -F ":" '{print NR,$1,$NF}' test.txt

# 打印test.txt文件内容中以:分隔后的第一列和最后一列并显示行号
awk 'NR==2,NR==3' test.txt

# 打印test.txt文件内容中第2行与第3行的内容

常用过滤

过滤行

过滤 /etc/passwd 中含有字符串 "nologin" 且行号大于 20 的行

过滤列

过滤 /etc/passwd 中第三列小于10的行

过滤 /etc/passwd 中第四列以0或1开头和结尾的行

统计

统计 /etc/passwd 行数

求和

AWK 和 SHELL 语法区别

演示文件(下方均使用此文件进行演示)

if 判断

输出第二列大于80的行的第一列

同时输出多个结果

for 循环

循环取列

循环求和

求每行数据的平均值

数组

求每行的平均值并输出

求每行平均值的和

求每行平均值的平均值

脚本形式

命令行参数数组 ARGC ARGV

  • ARGC 命令行参数个数

  • ARGV 每个参数的内容

生产案例

统计 nginx 日志中非 GET 和 POST 请求的个数

统计 nginx 日志中 GET 和 POST 请求各个状态码出现的次数

统计 nginx 日志中 GET 和 POST 请求各个状态码的流量

Last updated