【Linux系列】AWK 使用指南

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

AWK 是一种强大的文本处理工具,它起源于 Unix 系统,用于模式扫描和处理语言。AWK 的名称来源于其创始人 Alfred Aho、Peter Weinberger 和 Brian Kernighan 的姓氏首字母。AWK 特别适合于处理结构化数据,如 CSV 或 TSV 文件,以及任何行和列的文本数据。

AWK 的基本用法

AWK 的基本语法如下:

bash 复制代码
awk 'pattern {action}' file

其中,pattern 是一个条件表达式,action 是当模式匹配时执行的代码块,file 是要处理的文件。如果没有指定文件,AWK 将从标准输入读取数据。

打印所有行

最简单的 AWK 命令是打印文件的所有行:

bash 复制代码
awk '{print}' file.txt

打印特定列

假设我们有一个 CSV 文件,我们想要打印第二列:

bash 复制代码
awk '{print $2}' file.csv

这里,$2 表示第二个字段。

打印特定行

如果我们只想打印第 10 行,可以使用:

bash 复制代码
awk 'NR == 10' file.txt

NR 是一个内置变量,表示当前处理的是第几行。

模式匹配

AWK 允许使用正则表达式进行模式匹配。例如,如果我们想要匹配包含单词 "error" 的行,可以这样做:

bash 复制代码
awk '/error/' file.log

内置变量

AWK 提供了一些内置变量,这些变量在处理文本时非常有用:

  • $1, $2, ...:这些变量代表当前行的字段,由 FS(字段分隔符)分隔。
  • NF:表示当前行的字段总数。
  • NR:表示当前处理的行号。
  • FNR:表示当前文件的行号。
  • FS:字段分隔符,默认为空格或制表符。
  • RS:记录分隔符,默认为换行符。
  • ORS:输出记录分隔符,默认为换行符。
  • OFS:输出字段分隔符,默认为空格。

高级技巧

多模式匹配

AWK 允许在同一命令中使用多个模式:

bash 复制代码
awk '/error/, /warning/' file.log

这将打印包含 "error" 或 "warning" 的行。

条件和动作

我们可以在 AWK 中使用 if-else 语句和其他控制结构:

bash 复制代码
awk '{if ($1 == "error") print "Error: " $0; else if ($1 == "warning") print "Warning: " $0}' file.log

这段代码会根据第一个字段的值打印不同的信息。

自定义函数

AWK 允许用户定义函数,这使得处理复杂的文本更加灵活:

bash 复制代码
awk '
  function is_error(line) {
    return line ~ /error/;
  }
  {
    if (is_error($0)) print "Error: " $0;
  }
' file.log

处理多个文件

AWK 可以同时处理多个文件,只需将它们作为参数传递:

bash 复制代码
awk '{print FILENAME, $0}' file1.txt file2.txt

这将打印每个文件的名称和内容。

内置数组

AWK 支持数组,这使得数据的存储和检索变得简单:

bash 复制代码
awk '{arr[$1] += $2} END {for (key in arr) print key, arr[key]}' file.csv

这段代码将计算 CSV 文件中每个唯一字段的总和。

觉得有用的话点个赞 👍🏻 呗。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

相关推荐
mennekes7 分钟前
暗装插座箱 VS 明装插座箱,工地和车间怎么取舍
运维·网络·科技·安全·制造
叼烟扛炮7 分钟前
Linux 学习笔记(三十六):并发进阶——读写锁 vs 自旋锁,到底怎么选?
linux·运维·服务器·笔记·学习
qq_364682159 分钟前
录音APP怎么切换语言?多语言版本如何使用
java·服务器·前端
正经教主14 分钟前
【FDE系列】阶段2:Day 43(UP详细版):Docker Compose — 多容器一键编排
运维·docker·容器
大耳朵爱学习24 分钟前
Andrew Ng深度解析:普通人如何利用AI把想法变成工具,实现工作自动化(小白程序员必看)
运维·人工智能·ai·自动化·大模型·就业·大模型学习
木雷坞25 分钟前
AnythingLLM Docker部署:中文资料上传后无引用的检查路径
运维·docker·容器
张赐荣25 分钟前
争渡读屏OCR文字/图像识别插件接口功能实现详解
运维·服务器·ocr
中科三方26 分钟前
AI时代新攻击面:悬空DNS记录正在成为黑客的低成本入侵入口
服务器·前端·人工智能
bu_shuo30 分钟前
删除Windows资源管理器左侧【此电脑】的Linux企鹅图标
linux·windows
步行cgn31 分钟前
Spring MVC 删除功能:用隐藏表单模拟 DELETE 请求的完整解析
linux·运维·服务器