当前位置:首页>Linux>Linux | awk 命令解析与扩展知识点

Linux | awk 命令解析与扩展知识点

  • 2026-08-26 10:48:25
Linux | awk 命令解析与扩展知识点

点击关注,更多精彩

2026 NEW YEAR

awk 命令解析与扩展知识点

The Lantern Festival

一、awk 基础用法

1. 核心语法

awk 是一种用于处理文本和数据的脚本语言,其基本格式为:

awk [选项] '[条件]{指令}' 文件

  • 条件:决定指令何时执行,支持正则表达式、数值 / 字符串比较、逻辑运算等。

  • 指令:满足条件时执行的操作,print 是最常用的指令。多条指令可用分号分隔。

2. 常用命令选项

  • -F   指定字段分隔符(默认空格或 Tab)

    awk -F: '{print $1,$3}' /etc/passwd

3. 内置特殊变量

  • FS    字段分隔符(Field Separator),与 -F 功能相同    例如:BEGIN{FS=":"}    

  • $n    第 n 个字段,如$1、$3分别表示第 1、第 3 列    例如:print $1    

  • $0    当前读入的整行文本内容    例如:print $0    

  • NF    记录当前处理行的字段个数(列数)   例如:print NF    

  • NR    记录当前已读入行的数量(行数)  例如:print NR    

二、条件与模式匹配

1. 正则表达式

  • /正则表达式/:匹配行。

  • ~:匹配;!~:不匹配。

  • 列出以ro开头的用户记录

    awk -F: '/^ro/{print}' /etc/passwd

  • 列出第7个字段不以bash结尾的用户

    awk -F: '$7!~/bash$/{print $1,$7}' /etc/passwd

2. 数值 / 字符串比较

  • 运算符:==、!=、>、>=、<、<

  • 输出第2行文本

    awk 'NR==2{print}' reg.txt

  • 输出第2列不是XX的行

    awk '$2!="XX"{print}' reg.txt

3. 逻辑比较测试

  • &&:逻辑与(多个条件都成立)

  • ||:逻辑或(只要有一个条件成立)

  • 列出UID小于2的用户信息

    awk -F: '$3>=0 && $3<2{print $1,$3}' /etc/passwd

  • 列出UID为1或7的用户信息

    awk -F: '$3==1 || $3==7{print $1,$3}' /etc/passwd

4. 运算符

  • 支持 +、-、*、/、%、++、--、+=、-= 等算术运算。

  • 输出奇数行文本

    awk 'NR%2==1{print}' reg.txt

三、awk 的执行时机(BEGIN/END)

  • BEGIN:在所有行处理前执行,用于初始化操作(如设置分隔符)。

  • END:在所有行处理后执行,用于输出统计结果。

  • 统计文本总字段数

    awk 'BEGIN{i=0}{i+=NF}END{print i}' reg.txt 

  • 计算1-200内能同时被3和13整除的整数个数

    awk 'BEGIN{i=0}{for(i=0;i<=200;i++)if($0%3==0&&$0%13==0)j++}END{print j}'

四、awk 数组

1. 定义与使用

  • 定义数组:数组名[下标]=元素值

  • 调用数组:数组名[下标]

  • 遍历数组:for (变量 in 数组名) {print 数组名[变量]}

  • 定义并遍历数组

    awk 'BEGIN{name[0]="jim";name[1]="tom"; print name[0],name[1]}'

2. 数组与排序

可利用 sort 命令对数组提取的结果进行排序:

  • -n:按数字升序

  • -k:按指定列排序

  • -r:反向排序(降序)

  • 按IP统计访问次数并排序

    awk '{ip[$1]++} END{for(i in ip) print i,ip[i]}' access.log | sort -nr

五、扩展知识点

1. 多行处理与函数

  • 多行合并:使用 getline 读取下一行,或通过数组缓存多行。

  • 内置函数:

  • length(str):返回字符串长度。

  • sub(/old/,new,str):替换字符串中第一个匹配项。

  • gsub(/old/,new,str):全局替换字符串中所有匹配项。

  • split(str,arr,sep):按分隔符将字符串分割到数组中。

2. 脚本化 awk

  • 当逻辑复杂时,可将 awk 脚本写入文件(如script.awk),然后执行:

    awk -f script.awk data.txt

  • 脚本文件内可包含完整的 BEGIN{...} {处理每行} END{...} 结构。

3. 与其他命令结合

  • awk 常与 grep、sort、uniq、head 等命令结合,构建强大的文本处理管道:

  • 统计Nginx访问日志中访问量Top10的IP

    cat access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -10

❥❥❥  END

原图地址如上

公众号菜单栏网盘自取

公众号:初见别辞

壁纸分享 | 电脑技术 | 头像

你们点点“分享”,给我充点儿电吧~

最新文章

随机文章