awk入门基础——什么是awk?怎么跑起来?

简介: awk是Linux下强大的文本处理工具兼脚本语言,擅长逐行提取、过滤与计算(如日志IP提取、字段统计)。其核心为“读取—处理—输出”三步机制,支持命令行单引号脚本和外部脚本文件两种运行方式,基于gawk兼容性强,入门简单、实用高效。

1. 先搞懂:awk到底是个啥?

很多Linux新手看到awk就头大,觉得它是个高深的命令,其实一句话就能说透:awk是一个文本处理工具,更是一门简单的脚本语言,核心作用就是“读取文本、处理文本、输出结果”。

你可以把它想象成一个“文本流水线工人”:它会一行一行地读取你的文本文件,按照你设定的规则,对每一行进行加工(比如提取指定内容、过滤符合条件的行、做简单计算),最后把加工好的结果输出给你。

咱们平时用grep只能“找内容”,用sed能“改内容”,而awk擅长“提取+处理”——比如从日志里提取IP、统计某个字段的总和、按条件筛选行并格式化输出,这些都是awk的强项。

补充一点:咱们Linux系统里,默认的awk一般是gawk(GNU awk),它是awk的增强版,支持更多功能,咱们这三篇教程,全是基于gawk讲解(和系统默认awk用法完全兼容,放心学)。

2. 入门必看:awk的运行机制(浅显版)

在学具体命令之前,先搞懂awk的运行逻辑,不然学再多参数也会乱。awk的运行就分3步,记好这3步,后续所有用法都能套进去:

  1. 读取行:awk会从指定的文本文件(或标准输入)中,一行一行地读取内容,直到文件结束。

  2. 处理行:对于每一行,都会按照你写的“规则”(脚本)进行处理。规则可以很简单(比如只打印第2列),也可以很复杂(比如判断条件、做计算)。

  3. 输出结果:处理完成后,按照规则将结果输出(默认输出到屏幕,也可以输出到文件)。

举个最直观的例子:假设你有一个文本文件test.txt,内容如下:

张三 20 男
李四 25 女
王五 30 男

如果你用awk命令:awk '{print $2}' test.txt,它的运行过程就是:

  • 读取第一行“张三 20 男”,按照规则“打印第2列”,输出20;

  • 读取第二行“李四 25 女”,打印第2列,输出25;

  • 读取第三行“王五 30 男”,打印第2列,输出30。

是不是很简单?接下来,我们先学“怎么运行awk”,再逐步拆解各种参数和用法。

3. 两种核心运行方式(必掌握)

根据上传的资料,awk有两种核心运行方式:直接在命令行写脚本通过脚本文件运行,两种都要掌握,日常用得最多。

3.1 方式一:命令行直接写脚本(适合简单需求)

语法格式(牢记):

awk [选项] '脚本内容' 要处理的文件

关键注意点:

  • 脚本内容必须用 单引号'' 包裹(避免被Linux shell解析,这是新手最容易踩的坑);

  • 脚本的核心是“模式+动作”,格式一般是:'模式 {动作}'(模式可选,动作必须用{}包裹);

  • 如果没有模式,只写动作,那么awk会对每一行都执行这个动作(比如上面的例子 awk '{print $2}' test.txt,就没有模式,只执行“打印第2列”的动作)。

实操示例(可直接复制运行):

先准备一个测试文件test.txt(和上面一样),执行以下命令,感受效果:

# 1. 打印所有行(动作:print,没有模式,默认处理所有行)
awk '{print}' test.txt
# 输出结果和cat test.txt一样:
# 张三 20 男
# 李四 25 女
# 王五 30 男

# 2. 打印每一行的第1列和第3列($1表示第1列,$3表示第3列,用逗号分隔)
awk '{print $1, $3}' test.txt
# 输出:
# 张三 男
# 李四 女
# 王五 男

# 3. 带模式:只打印“性别为男”的行(模式:$3=="男",动作:打印整行)
awk '$3=="男" {print}' test.txt
# 输出:
# 张三 20 男
# 王五 30 男

# 4. 带模式+复杂动作:打印性别为男的行,并且在前面加“姓名:”“年龄:”
awk '$3=="男" {print "姓名:"$1, "年龄:"$2}' test.txt
# 输出:
# 姓名:张三 年龄:20
# 姓名:王五 年龄:30

补充说明:$0 表示“整行内容”,比如 awk '{print $0}' test.txtawk '{print}' test.txt 效果一样,都是打印整行。

3.2 方式二:通过脚本文件运行(适合复杂需求)

如果你的脚本比较复杂(比如有多条规则、循环、函数),直接写在命令行里会很乱,容易出错,这时候就可以把脚本写到一个文件里,然后用awk去执行这个文件。

语法格式(牢记):

awk [选项] -f 脚本文件名 要处理的文件

关键注意点:

  • -f 选项指定脚本文件(f是file的缩写);

  • 脚本文件里,不需要用单引号包裹脚本内容,直接写“模式+动作”即可;

  • 脚本文件可以任意命名,建议后缀为 .awk(方便识别,比如test.awk)。

实操示例(可直接复制运行):

# 1. 创建一个脚本文件test.awk,写入以下内容(用vim或nano编辑)
vim test.awk
# 脚本内容:
$3=="男" {
   print "男性用户:"$1, "年龄:"$2}
$3=="女" {
   print "女性用户:"$1, "年龄:"$2}

# 2. 保存退出后,用awk执行这个脚本,处理test.txt
awk -f test.awk test.txt

# 3. 输出结果:
# 男性用户:张三 年龄:20
# 女性用户:李四 年龄:25
# 男性用户:王五 年龄:30

是不是很清晰?复杂的逻辑拆分到脚本文件里,后续修改、复用都很方便。

4. 课后练习(自己动手试,巩固记忆):

  1. 用命令行直接写脚本,打印test.txt中“年龄大于25”的行;

  2. 创建一个脚本文件,实现“打印所有行的第1列,并在后面加‘_user’”(比如张三_user);

  3. 尝试用 awk '{print $0, "补充内容"}' test.txt,看看输出效果(理解$0的用法)。

下一篇,我们将详细讲解awk的命令行参数(结合上传资料的所有选项),包括最常用的-F、-v、-e等,还有字段分隔符、变量赋值等核心用法,帮你解锁更强大的文本处理能力!

相关文章
|
21天前
|
运维 Linux 应用服务中间件
Linux sort命令实战教程
本文详解Linux `sort`命令:从基础排序、数字/反向/去重/忽略大小写等常用参数,到按字段(-k)、分隔符(-t)、月份(-M)、人类可读大小(-h)等进阶用法,并附日志、CSV、文件大小等实战案例。通俗易懂,示例可直接运行,新手也能快速掌握。
|
2月前
|
Linux 网络安全
一文读懂NAT:SNAT与DNAT的“庐山真面目”及firewalld实战配置
本文详解NAT核心技——SNAT与DNAT,通过生活类比解析地址转换原理。针对不同系统版本,分别介绍firewalld新旧版配置方法:旧版用Direct接口,新版推荐Policy策略模式,涵盖命令示例与验证方式,助你轻松实现内网共享上网与服务发布。
|
3月前
|
Ubuntu Linux 应用服务中间件
Rocky Linux 9下logrotate配置及踩坑记
本文介绍在Rocky Linux 9系统中配置Nginx日志轮转的完整过程,满足等保要求保留180天日志。通过修改`/etc/logrotate.conf`并创建Nginx专属轮转配置,结合`logrotate.d`与每日定时任务,解决默认无cron脚本导致轮转失效的问题,并提示避免将日志置于系统目录引发权限错误。
|
2月前
|
存储 安全 Cloud Native
Rocky Linux下配置nfs
NFS(网络文件系统)是类Unix系统间分布式文件共享的核心协议,支持跨机器数据共享,广泛应用于云原生、企业文件服务。本文详解NFS在Rocky Linux下的部署:从基础概念、组件安装(nfs-utils、rpcbind)、服务器配置(/etc/exports)、防火墙设置到客户端挂载与自动加载(fstab、autofs),并提供常见问题排查方案,助力构建高效安全的共享存储环境。
|
JSON Linux 网络安全
【全面解析】Windows 如何使用 SSH 密钥远程连接 Linux 服务器
【全面解析】Windows 如何使用 SSH 密钥远程连接 Linux 服务器
1768 2
|
22天前
|
索引 Perl
awk高级用法——内置变量、函数与进阶技巧
本文深入讲解awk进阶核心:内置变量(NR/FNR/NF/FS/OFS/FILENAME/ARGC/ARGV等)与内置函数(length/substr/index/gsub等),涵盖行字段统计、多文件处理、动态分隔符、字符串操作等高频场景,配丰富实操示例,助你从入门迈向精通。
|
23天前
|
Unix Shell Perl
awk核心命令行参数详解
本文精讲awk最常用10个命令行参数:-F(自定义分隔符)、-v(预设变量)、-f/-e(执行脚本)、-b(字节模式防乱码)、-c/-P(兼容/POSIX模式)、-d(调试变量导出)、-h(快速查帮助)等,配真实示例,学完即用!
|
27天前
|
存储 安全 Linux
Linux sed命令详细教程
sed是Linux下高效流编辑器,GNU sed为其主流实现。它单次遍历输入,支持管道过滤、批量配置修改与日志处理,具备无交互、原地编辑、扩展正则等优势,是Shell自动化必备利器。
|
SQL 存储 缓存
PostgreSQL函数管理接口
学习PostgreSQL服务端开发必须要对函数管理接口有比较深入的了解
|
SQL 关系型数据库 C语言
PostgreSQL SQL扩展 ---- C语言函数(三)
可以用C(或者与C兼容,比如C++)语言编写用户自定义函数(User-defined functions)。这些函数被编译到动态可加载目标文件(也称为共享库)中并被守护进程加载到服务中。“C语言函数”与“内部函数”的区别就在于动态加载这个特性,二者的实际编码约定本质上是相同的(因此,标准的内部函数库为用户自定义C语言函数提供了丰富的示例代码)