Linux awk脚本入门教程_Linux强大的文本分析工具实例

发布时间 - 2025-12-12 00:00:00    点击率:
awk是Linux下以字段为单位处理文本的利器,语法为awk 'pattern {action}' file,支持内置变量、BEGIN/END块、条件判断和字符串操作,常用于日志分析、系统信息提取与统计。

awk 是 Linux 下处理文本的利器,特别适合按行、按列提取、统计、过滤和格式化数据。它不像 sed 那样专注编辑,也不像 grep 只做匹配,而是以“字段为单位”做逻辑处理,写法简洁,上手快,一条命令常顶一个 Python 小脚本。

awk 的基本结构和运行方式

awk 的核心语法是:awk 'pattern {action}' file。其中 pattern 是匹配条件(可省略,默认每行都处理),action 是执行动作(如打印、计算、判断)。最常用的内置变量有:

  • $0:整行内容
  • $1, $2, …:第1、第2个字段(默认空格或制表符分隔)
  • NF:当前行字段总数
  • NR:当前处理的行号(从1开始)
  • FS:输入字段分隔符(默认空白);OFS:输出分隔符(默认空格)

常用实例:从日志和系统命令中快速提取信息

比如查看 df -h 输出中使用率超过 80% 的分区:

df -h | awk '$5+0 > 80 {print $1, $5}'

说明:$5 是“已用百分比”,加 0 是强制转成数字(避免带 % 符号时字符串比较出错);{print $1, $5} 输出设备名和百分比。

再比如统计 nginx 日志中访问次数最多的前 3 个 IP:

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

或者直接用 awk 统计(更高效):

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

用 BEGIN 和 END 做初始化与汇总

awk 在读取文件前执行 BEGIN 块,在读完所有行后执行 END 块,非常适合做统计汇总。

例如计算 /etc/passwd 中 shell 字段(第7列)的种类和数量:

awk -F: 'BEGIN {print "Shell\tCount"} {sh[$7]++} END {for (s in sh) print s, sh[s]}' /etc/passwd | sort -k2nr

这里 -F: 指定冒号为分隔符;BEGIN 打印表头;END 遍历数组并输出结果。

简单条件判断和字符串操作

awk 支持 if、else、正则匹配(~ 和 !~)、substr、length、gsub 等函数。

例如:只打印 /etc/fstab 中非注释、非空行,且第3列是 ext4 的设备:

awk '$1 !~ /^#/ && NF > 0 && $3 == "ext4" {print $1, $2}' /etc/fstab

又如把某列小写转大写:

awk '{print toupper($2)}' data.txt

替换字段中的某个单词(类似 sed):

awk '{gsub(/old/, "new", $3); print}' file.txt

基本上就这些。awk 不需要编译,即写即跑,配合管道几乎能覆盖 80% 的日常文本分析需求。写多了你会发现,它不是“替代脚本语言”,而是“让脚本语言变得不必要的那个工具”。


# linux  # python  # nginx  # access  # 工具 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  装修招标网站设计制作流程,装修招标流程?  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  MySQL查询结果复制到新表的方法(更新、插入)  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  Laravel如何实现本地化和多语言支持?(i18n教程)  微信小程序 wx.uploadFile无法上传解决办法  Laravel如何处理和验证JSON类型的数据库字段  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】  打造顶配客厅影院,这份100寸电视推荐名单请查收  php json中文编码为null的解决办法  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  如何快速上传自定义模板至建站之星?  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  手机软键盘弹出时影响布局的解决方法  三星、SK海力士获美批准:可向中国出口芯片制造设备  高端云建站费用究竟需要多少预算?  Python文本处理实践_日志清洗解析【指导】  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  如何快速搭建二级域名独立网站?  Laravel如何配置和使用缓存?(Redis代码示例)  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  Laravel如何实现事件和监听器?(Event & Listener实战)  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  图册素材网站设计制作软件,图册的导出方式有几种?  大连 网站制作,大连天途有线官网?  如何在香港服务器上快速搭建免备案网站?  教你用AI润色文章,让你的文字表达更专业  ,在苏州找工作,上哪个网站比较好?  Android 常见的图片加载框架详细介绍  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  网站图片在线制作软件,怎么在图片上做链接?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  iOS验证手机号的正则表达式  在线制作视频网站免费,都有哪些好的动漫网站?  详解MySQL数据库的安装与密码配置  JS弹性运动实现方法分析