首页 > 其他分享 >玩转 AWK:一个高效处理文本的利器

玩转 AWK:一个高效处理文本的利器

时间:2025-01-12 19:57:32浏览次数:3  
标签:txt sum 利器 awk 玩转 print AWK csv

玩转 AWK:一个高效处理文本的利器

在 Linux 的世界里,有许多工具可以用来处理文本,但要论“优雅”和“强大”,AWK 绝对榜上有名。无论是分析日志、处理 CSV 文件,还是提取结构化数据,AWK 都是你的好帮手。

今天,我们就来深入浅出地聊聊 AWK 的基础用法,以及如何通过它在工作中如鱼得水!


一、AWK 是什么?

AWK 是一个面向文本处理的编程语言,名字来源于它的三位发明者:AhoWeinbergerKernighan(没错,就是写《The C Programming Language》的 Kernighan!)。

它的核心功能是逐行处理文本,支持模式匹配数据操作,可以看作是一个“迷你编程语言”。


二、AWK 的工作原理

  1. 逐行读取输入
    AWK 将文本文件或标准输入逐行处理,每次处理一行。

  2. 基于模式匹配
    每行数据会与指定的模式进行匹配。

  3. 执行操作
    如果匹配成功,执行对应的操作。

一句话总结:“匹配模式 -> 执行动作”


三、AWK 的语法结构

AWK 的基本命令格式如下:

awk 'pattern {action}' file
  • pattern:匹配条件(可以是正则表达式、关系运算等)。
  • {action}:对匹配到的行执行的操作。
  • file:输入文件(也可以通过管道传入)。

四、AWK 的常用变量

在 AWK 中,每一行会被拆分为多个字段,可以通过内置变量访问这些字段:

  • $0:当前行的全部内容。
  • $1, $2, ...:当前行的第 1、2、… 个字段。
  • NR:当前行号(Number of Record)。
  • NF:当前行的字段数(Number of Fields)。

例如,以下是一个 CSV 文件 data.csv

张三,25,程序员
李四,30,设计师
王五,22,测试工程师

运行命令:

awk -F',' '{print $1, $3}' data.csv

结果输出:

张三 程序员
李四 设计师
王五 测试工程师

这里:

  • -F',' 指定逗号为字段分隔符。
  • $1$3 分别代表第 1 和第 3 列。

五、AWK 的常用操作

1. 打印指定字段

awk '{print $1, $3}' file.txt

输出文件中每行的第 1 和第 3 个字段。


2. 基于条件筛选

awk '$2 > 25 {print $1, $2}' data.csv

输出第 2 列值大于 25 的行。


3. 统计字段数

awk '{print NR, NF}' file.txt

输出每行的行号和字段数。


4. 文本替换

awk '{gsub("张三", "小张"); print}' file.txt

将文本中的“张三”替换为“小张”。


5. 字段求和

假设有一个文件 numbers.txt,内容如下:

5 10
3 7
8 2

运行命令:

awk '{sum += $1} END {print "Sum:", sum}' numbers.txt

输出:

Sum: 16

这里,END 块在所有行处理完后执行,用于输出最终结果。


六、结合实际案例

案例 1:日志分析

假设有一个 Web 服务器访问日志 access.log

192.168.1.1 - - [09/Jan/2025:12:00:01] "GET /index.html HTTP/1.1" 200 1024
192.168.1.2 - - [09/Jan/2025:12:00:02] "GET /about.html HTTP/1.1" 404 512

统计每种 HTTP 状态码出现的次数:

awk '{status[$9]++} END {for (code in status) print code, status[code]}' access.log

输出:

200 1
404 1

案例 2:处理 CSV 文件

假设有一个学生成绩文件 scores.csv

张三,80,90,85
李四,75,85,88
王五,92,88,95

计算每个学生的总分:

awk -F',' '{sum = $2 + $3 + $4; print $1, sum}' scores.csv

输出:

张三 255
李四 248
王五 275

案例 3:过滤大文件

快速筛选包含关键字的行:

awk '/error/ {print}' large_log.txt

输出包含“error”的所有行。


七、AWK 的高级用法

1. 脚本文件

将 AWK 脚本保存为文件,例如 script.awk

BEGIN {FS=","; print "学生 总分"} 
{
  sum = $2 + $3 + $4
  print $1, sum
}
END {print "处理完成"}

运行脚本:

awk -f script.awk scores.csv

2. 结合 Shell 变量

threshold=90
awk -v th=$threshold '$2 > th {print $1, $2}' scores.csv

传入 Shell 变量作为条件。


八、总结

AWK 是一个灵活、高效的文本处理工具,尤其适合处理结构化或半结构化数据。它的学习曲线较低,但功能非常强大,无论是写简单的命令还是复杂的脚本,都可以轻松应对。

适用场景:

  • 快速查看和过滤文件内容。
  • 批量处理日志或数据文件。
  • 自动化报表生成。

学会 AWK,你会发现它不仅是工具箱中的“瑞士军刀”,还是一把“魔法钥匙”,能帮你打开文本处理的无限可能!

标签:txt,sum,利器,awk,玩转,print,AWK,csv
From: https://blog.csdn.net/weixin_42587823/article/details/145088395

相关文章

  • 【轻松掌握数据结构与算法】递归与回溯:解决复杂问题的利器
    在数据结构与算法的世界中,递归和回溯是两种强大的技术,它们可以帮助我们解决许多看似复杂的问题。本文将详细介绍递归和回溯的基本概念、应用场景以及它们的实现方法,并通过示例和图表来帮助你更好地理解这些概念。递归:自我调用的力量递归是一种函数调用自身的技术。它允许我......
  • 深入解析 SSR:提升性能与 SEO 的利器,以及它的局限性与适用场景
    在现代前端开发中,服务器端渲染(SSR) 是一项重要的技术,尤其在需要优化页面性能、提升SEO和改善用户体验的场景中。然而,SSR并非适用于所有场景,比如在 UniApp开发的原生App 中,SSR的作用就非常有限。本文将详细介绍SSR的概念、作用、适用场景以及不适用场景,并深入探讨Vue和......
  • 免杀加载利器---ShellcoderLoader
    公众号:泷羽Sec-风宵对oscp感兴趣的可以私聊我喔~目录公众号:泷羽Sec-风宵ShellcodeLoader功能特点 开发环境加载模式免杀效果安装方法项目地址 项目文件 使用方法 执行ShellQMaker查看获取payload.bin文件使用ShellQMaker最终生成的可执行免杀程序免杀结果......
  • 亚矩阵云手机:跨境出海直播的全方位利器
    在跨境出海直播领域,亚矩阵云手机扮演着举足轻重的角色,为跨境业务中面临的诸多挑战提供了行之有效的解决方案。以下将对其作用与解决方案展开详细阐述。一、亚矩阵云手机在跨境出海直播中的关键作用(一)突破地域限制,畅享全球畅连亚矩阵云手机凭借精心布局的全球网络,与顶级......
  • 基于SpringBoot+微信小程序的奶茶在线点单系统-毕业设计 & 简历双赢利器
    当今的互联网行业,对于开发者的技术要求越来越高,而项目经验也逐渐成为评价一名开发者水平的重要标准。对于刚接触后端开发的学生来说,SpringBoot是一个必学的后端框架,它轻量、快速且功能强大,被广泛应用于各类项目开发中。而微信小程序则是近几年大火的前端技术,凭借其用户量和......
  • Hawkeye :一款Windows综合应急响应工具
    文章来源以下公众号:也总想挖RCE,喜欢的师傅点点关注!简介Hawkeye(鹰眼)一款基于golang开发的安全工具,旨在帮助安全工程师上机排查时能够快速的定位问题,提供排查思路。功能外连分析当发现主机存在恶意外连时,并且知道外连地址,能够快速的定位外连的进程,以及进程的连接信息。同时根......
  • 潮汐指纹识别工具 : 在线网站识别利器
    最近发现了一个免费在线收集网站信息的工具,感觉挺好用的,给各位推荐下。潮汐在线指纹识别是山东新潮信息技术有限公司安全团队提供的一个免费开源在线网站信息收集工具。功能亮点:全面扫描只需输入目标网站的URL或IP地址,即可获取该网站的标题、中间件、操作系统、域名信息等关......
  • 从入门到精通:9个插件带你玩转Zotero文献管理!
                                    还在为海量文献管理头疼吗?还在为找不到合适的插件犯愁吗?别急,今天我就要带你解锁Zotero的终极武器-那些让你爱不释手的必备插件!作为一个从小白到文献管理达人的过来人,我可以负责任地说:没有这些插件,......
  • 『玩转Streamlit』--集成定时任务
    学习了Streamlit了之后,可以尝试给自己的命令行小工具加一个简单的界面。本篇总结了我改造自己的数据采集的工具时的一些经验。1.概要与常规的程序相比,数据采集任务的特点很明显,比如它一般都是I/O密集型程序,涉及大量网络请求或文件读写,耗费的时间比较长;而且往往是按照一定的时......
  • 苹果手机群控系统:高效、安全的管理利器
    在数字化时代,随着企业对移动设备管理需求的不断增加,苹果手机群控系统作为一种高效、安全的管理工具,逐渐崭露头角。它不仅能够实现对多台苹果设备(如iPhone、iPad等)的集中管理和控制,还能显著提升工作效率,保障数据安全。本文将详细介绍苹果手机群控系统的功能、应用场景及其优势......