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命令------排序必定好用的命令

相关推荐
程序员岳焱4 小时前
Java 与 MySQL 性能优化:Java 实现百万数据分批次插入的最佳实践
后端·mysql·性能优化
麦兜*4 小时前
Spring Boot启动优化7板斧(延迟初始化、组件扫描精准打击、JVM参数调优):砍掉70%启动时间的魔鬼实践
java·jvm·spring boot·后端·spring·spring cloud·系统架构
大只鹅5 小时前
解决 Spring Boot 对 Elasticsearch 字段没有小驼峰映射的问题
spring boot·后端·elasticsearch
ai小鬼头5 小时前
AIStarter如何快速部署Stable Diffusion?**新手也能轻松上手的AI绘图
前端·后端·github
IT_10245 小时前
Spring Boot项目开发实战销售管理系统——数据库设计!
java·开发语言·数据库·spring boot·后端·oracle
bobz9656 小时前
动态规划
后端
stark张宇6 小时前
VMware 虚拟机装 Linux Centos 7.9 保姆级教程(附资源包)
linux·后端
Johny_Zhao6 小时前
Ubuntu系统安装部署Pandawiki智能知识库
linux·mysql·网络安全·信息安全·云计算·shell·yum源·系统运维·itsm·pandawiki
亚力山大抵7 小时前
实验六-使用PyMySQL数据存储的Flask登录系统-实验七-集成Flask-SocketIO的实时通信系统
后端·python·flask
超级小忍7 小时前
Spring Boot 中常用的工具类库及其使用示例(完整版)
spring boot·后端