awk读取文件的基本逻辑

2024-12-27 17:46:13 306

awk读取文件的基本逻辑

欢迎来到蓝队云技术小课堂,每天分享一个技术小知识。


# 用法
awk 'awk_program' a.txt

语法解析:

  • a.txt 是awk要读取的文件,可以是0个文件、一个文件或者多个文件;如果给定0个文件,则标识从标准输入中读取

  • 单引号包围的是awk代码,也称为awk程序;尽量使用单引号,因为在awk程序中经常使用$符号,而$符号在shell中是变量符号,如果使用双引号,则$符号会被shell解析为shell变量,然后进行变量替换;使用单引号,会让$符号留给awk去解析

  • awk程序中,大量使用大括号,大括号表示代码块,代码块中间可以直接连用,代码块内部的多个语句使用分号";"隔开

# 范例
# 输出a.txt中的每一行
awk '{print $0}' a.txt

# 多个代码块,代码块中多个语句
# 输出每行之后还输出两行:hello行和world行
awk '{print $0}{print "hello";print "world"}' a.txt

对于awk '{print $0}' a.txt,它类似于shell的while循环while read line;do echo "$line";done <a.txt。awk隐藏了读取每一行的while循环,它会自动读取每一行,其中的{print $0}对应于Shell的while循环体echo "$line"部分。

下面再分析该awk命令的执行过程:

  1. 读取文件第一行(awk默认按行读取文件)

  2. 将所读取的行赋值给awk的变量$0,于是$0中保存的就是本次所读取的行数据

  3. 进入代码块{print $0}并执行其中代码print $0,即输出$0,也即输出当前所读取的行

  4. 执行完本次代码之后,进入下一轮awk循环:继续读取下一行(第二行)

    • 将第二行赋值给变量$0

    • 进入代码块执行print $0

    • 执行完代码块后再次进入下一轮awk循环,即读取第三行,然后赋值给$0,再执行代码块

    • …不断循环,直到读完文件所有数据…

  5. 退出awk


蓝队云官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,蓝队云整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。

更多技术知识,蓝队云期待与你一起探索。




提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: