💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
- 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
- 导航
- 檀越剑指大厂系列:全面总结 java 核心技术,jvm,并发编程 redis,kafka,Spring,微服务等
- 常用开发工具系列:常用的开发工具,IDEA,Mac,Alfred,Git,typora 等
- 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
- 新空间代码工作室:提供各种软件服务,承接各种毕业设计,毕业论文等
- 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
- 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨
博客目录
- AWK 的基本用法
- 打印所有行
- 打印特定列
- 打印特定行
- 模式匹配
- 内置变量
- 高级技巧
- 多模式匹配
- 条件和动作
- 自定义函数
- 处理多个文件
- 内置数组
AWK 是一种强大的文本处理工具,它起源于 Unix 系统,用于模式扫描和处理语言。AWK 的名称来源于其创始人 Alfred Aho、Peter Weinberger 和 Brian Kernighan 的姓氏首字母。AWK 特别适合于处理结构化数据,如 CSV 或 TSV 文件,以及任何行和列的文本数据。
AWK 的基本用法
AWK 的基本语法如下:
awk 'pattern {action}' file
其中,pattern
是一个条件表达式,action
是当模式匹配时执行的代码块,file
是要处理的文件。如果没有指定文件,AWK 将从标准输入读取数据。
打印所有行
最简单的 AWK 命令是打印文件的所有行:
awk '{print}' file.txt
打印特定列
假设我们有一个 CSV 文件,我们想要打印第二列:
awk '{print $2}' file.csv
这里,$2
表示第二个字段。
打印特定行
如果我们只想打印第 10 行,可以使用:
awk 'NR == 10' file.txt
NR
是一个内置变量,表示当前处理的是第几行。
模式匹配
AWK 允许使用正则表达式进行模式匹配。例如,如果我们想要匹配包含单词 “error” 的行,可以这样做:
awk '/error/' file.log
内置变量
AWK 提供了一些内置变量,这些变量在处理文本时非常有用:
$1, $2, ...
:这些变量代表当前行的字段,由 FS(字段分隔符)分隔。NF
:表示当前行的字段总数。NR
:表示当前处理的行号。FNR
:表示当前文件的行号。FS
:字段分隔符,默认为空格或制表符。RS
:记录分隔符,默认为换行符。ORS
:输出记录分隔符,默认为换行符。OFS
:输出字段分隔符,默认为空格。
高级技巧
多模式匹配
AWK 允许在同一命令中使用多个模式:
awk '/error/, /warning/' file.log
这将打印包含 “error” 或 “warning” 的行。
条件和动作
我们可以在 AWK 中使用 if-else 语句和其他控制结构:
awk '{if ($1 == "error") print "Error: " $0; else if ($1 == "warning") print "Warning: " $0}' file.log
这段代码会根据第一个字段的值打印不同的信息。
自定义函数
AWK 允许用户定义函数,这使得处理复杂的文本更加灵活:
awk 'function is_error(line) {return line ~ /error/;}{if (is_error($0)) print "Error: " $0;}
' file.log
处理多个文件
AWK 可以同时处理多个文件,只需将它们作为参数传递:
awk '{print FILENAME, $0}' file1.txt file2.txt
这将打印每个文件的名称和内容。
内置数组
AWK 支持数组,这使得数据的存储和检索变得简单:
awk '{arr[$1] += $2} END {for (key in arr) print key, arr[key]}' file.csv
这段代码将计算 CSV 文件中每个唯一字段的总和。
觉得有用的话点个赞
👍🏻
呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙