awk命令——功能强大的文本处理工具

什么是awk命令

awk命令,是一个功能强大的文本处理工具,他的名字是由它的三位创始人------Alfred A ho, Peter W einberger和Brian Kernighan的首字母组合而来的,通过awk命令,可以是文本的处理变得轻松自如。

awk命令处理文本的方式

awk命令处理文本时,他会遍历文本的每一行,让每一行跟匹配条件进行匹配,如果匹配成功,就执行匹配条件后面的命令,否则就略过匹配条件后面的命令。直到遍历结束,awk命令才停止处理。

awk命令的语法

awk命令,它的核心就在于它自带的awk命令的语法和内置变量。

awk自带的命令语法,主要由正则构成的匹配条件及命令本身结合而成,像这样的组合可以有多个,并且可以直接拼接到一起。

bash 复制代码
awk '[匹配条件]{命令本身}...' 文件

awk的命令,跟我们学到的编程语言非常的相似。 只要你入了IT的大门,那么你就可以大概的学会它的命令。比如awk命令里的for循环,他几乎跟C/C++中的for循环一样,再比如awk命令里的**运算符,它跟python里的**运算符的功能也一样。

awk命令的内置变量

关于awk命令,唯一要好好记的则是awk命令的内置变量,因为通过内置变量,你可以轻松自如地得到某个文件的信息。

内置变量 意义 记巧
ARGC 当前执行的awk命令参数个数,适用于统计被处理文件数量
ARGV awk命令参数数组
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk命令处理到的文件名 FILENAME的中文是"文件名"
FNR 当前处理行对应在文件中的行号 FNR = File + NR
FS 输入域分隔符,等同于awk命令的选项-F,默认为空格 FS = field spilt(fieid的意思是区域)
NF 当前行处理的输入域的个数 NF = num field
NR 已处理的行数 NR = num rows
OFS 输出域分隔符 OFS = output field spilt
ORS 输出行分隔符 ORS = output rows spilt
RS 被处理行的分隔符 RS = rows spilt
$n $0表示读取到的整一行,$1表示行的第一个输入域,$2表示行的第一个输入域,往后你也能推导出来 awk命令中的$n ≈ shell中的$n
$NF 被处理行的最后一个输入域 $NF = $number finally

awk命令的选项

关于awk命令的选项,主要有这两种。

选项 意义 记巧
-v 定义变量 -v -> variable
-F 设置输入域的分隔符 -F -> field split

其中还要注意的是,这些选项是区分大小写的 ,你如果把-F写成-f了,那么就会awk命令报错。

awk命令的具体实例

学完awk命令之后,接下来就以下面的t.txt文本文件来举几个例子吧。

csharp 复制代码
a b cd efg
1234567890 ~!@#$%^&*()_+   
/ //* *- *- //* */ -* / *-- -* 
joy it 66666666666666666666666666666666   
the the is the the      
awk is good ^v^  

1. 读取t.txt文件每行第一个被空格分开的列

bash 复制代码
awk '{print $1}' t.txt

2. 显示t.txt文件每一行的行号

bash 复制代码
awk '{print NR, $0}' t.txt

3. 查询t.txt文件带有字符t-z的行

bash 复制代码
awk '{print $1}' t.txt

4. 显示t.txt文件的第一行

bash 复制代码
awk '{if(1 == NR){print $0}}' t.txt

5. 在第一行前面插入"//t.txt"

bash 复制代码
awk '{if(1 == NR){printf("//%s\n", FILENAME)}print $0}' t.txt

6. 输出t.txt文件中被*分割开的第3行的第1-3列

bash 复制代码
awk -F* '{if(3 == NR){print $1, $2, $3}}' t.txt

7. 输出t.txt文件每一行5遍

bash 复制代码
awk -v i=0 '{for (i=0;i<5;i++){print $0}}' t.txt

下篇预告

sort命令------排序必定好用的命令

相关推荐
小蒜学长1 小时前
springboot多功能智能手机阅读APP设计与实现(代码+数据库+LW)
java·spring boot·后端·智能手机
追逐时光者2 小时前
精选 4 款开源免费、美观实用的 MAUI UI 组件库,助力轻松构建美观且功能丰富的应用程序!
后端·.net
你的人类朋友3 小时前
【Docker】说说卷挂载与绑定挂载
后端·docker·容器
间彧3 小时前
在高并发场景下,如何平衡QPS和TPS的监控资源消耗?
后端
间彧3 小时前
QPS和TPS的区别,在实际项目中,如何准确测量和监控QPS和TPS?
后端
间彧4 小时前
消息队列(RocketMQ、RabbitMQ、Kafka、ActiveMQ)对比与选型指南
后端·消息队列
brzhang5 小时前
AI Agent 干不好活,不是它笨,告诉你一个残忍的现实,是你给他的工具太难用了
前端·后端·架构
brzhang5 小时前
一文说明白为什么现在 AI Agent 都把重点放在上下文工程(context engineering)上?
前端·后端·架构
Roye_ack5 小时前
【项目实战 Day9】springboot + vue 苍穹外卖系统(用户端订单模块 + 商家端订单管理模块 完结)
java·vue.js·spring boot·后端·mybatis
AAA修煤气灶刘哥7 小时前
面试必问的CAS和ConcurrentHashMap,你搞懂了吗?
后端·面试