Linux实战笔记(二) awk基本使用

简介: Linux实战笔记(二) awk基本使用

正文


1、基本介绍


awk 是一个处理文本文件的实用工具,常规的命令格式如下:

> awk [options...] 'BEGIN{statements} condition {actions} END{statements}' <file>


多个 statement 或多个 action 之间用 ; 分开,整个命令的作用过程如下:

  • 首先执行 BEGIN 块中的 statements,BEGIN 块中的 statements 只会在开始前执行一次
  • 然后按行遍历 file,如果该行满足 condition,那么对其执行 actions
  • 最后执行 END 块中的 statements,END 块中的 statements 只会在结束后执行一次


2、基本使用


首先我们构造一个测试文件 data.txt,它的内容如下:

this is the 1st line
this is the 2nd line
this is the 3rd line
this is the 4th line
this is the 5th line


(1)actions


常见的 actions 一般是 printprint 命令会打印在其后面指定的内容

> awk '{ print $0 }' data.txt
# this is the 1st line
# this is the 2nd line
# this is the 3rd line
# this is the 4th line
# this is the 5th line


上面的命令会打印每一行的 $0,$0 是一个特殊的标志,表示当前行的内容


此外,awk 还会使用分隔符将每一行分成若干字段,$1 表示第 1 个字段,$2 表示第 2 个字段,以此类推


默认的分隔符是空格和制表符,我们还可以使用 -F 参数自己指定分隔符

> awk -F 'the' '{ print $2 }' data.txt
# 1st line
# 2nd line
# 3rd line
# 4th line
# 5th line


(2)内置变量


awk 中有一些内置的变量供我们使用,常见的变量包括:

变量 含义
NR 当前记录的行号
NF 当前记录的字段个数
RS 记录分隔符,默认是 换行符
FS 字段分隔符,默认是 空格和制表符
ORS 输出的记录分隔符,默认是 换行符
OFS 输出的字段分隔符,默认是 空格


我们来看一个例子,该例子展示的是 NR 参数的使用,这里的结果很直观,不多作解释

> awk '{ print NR }' data.txt
# 1
# 2
# 3
# 4
# 5


大家能不能解释一下,下面的这个命令为什么会输出这样的结果呢

> awk '{ print $NR }' data.txt
# this
# is
# the
# 4th
# line


其实也很简单,对于第 1 行来说,NR 等于 1,所以 $NR 表示的是第 1 个字段,因此输出的是 this

对于第 2 行来说,NR 等于 2,所以 $NR 表示的是第 2 个字段,因此输出的是 is,下面以此类推


(3)内置函数


awk 还有一些内置的函数,常见的函数包括:

函数 含义
toupper() 将字符转换为大写
tolower() 将字符转换为小写
length() 返回字符串的长度
substr() 返回子字符串


我们还是来看一个例子,该例子展示的是 substr 函数的使用

> awk '{ print substr($0, 13) }' data.txt
# 1st line
# 2nd line
# 3rd line
# 4th line
# 5th line


(4)condition


  • 既可以是 条件语句
> # 只处理 NR >= 1 && NR <= 3 的记录
> awk 'NR >= 1 && NR <= 3  { print $0 }' data.txt
# this is the 1st line
# this is the 2nd line
# this is the 3rd line


  • 也可以是 正则表达式
> # 只处理 $0 能匹配正则 /[0-9]th/ 的记录
> awk '$0 ~ /[0-9]th/ { print $0 }' data.txt
# this is the 4th line
# this is the 5th line
> # 只处理 $4 能匹配正则 /^[0-9]th$/ 的记录
> awk '$4 ~ /^[0-9]th$/ { print $4 }' data.txt
# 4th
# 5th


(5)BEGIN 和 END


> # 统计行数
> awk 'BEGIN{ count = 0 } { count += 1 } END{ print count }' data.txt
# 5



目录
相关文章
|
1月前
|
Ubuntu Linux Python
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
在Linux系统中,使用Tkinter库时可能会遇到中文显示乱码的问题,这通常是由于字体支持问题导致的,可以通过更换支持中文的字体来解决。
117 0
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
|
3月前
|
Linux Perl
在Linux中,如何使用请用 cut 或者 awk,sed命令取出 linux 中 eth0 的 IP 地址?
在Linux中,如何使用请用 cut 或者 awk,sed命令取出 linux 中 eth0 的 IP 地址?
|
27天前
|
Linux Perl
Linux awk命令使用技巧
【10月更文挑战第16天】Linux awk命令使用技巧
28 4
|
30天前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
82 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
1月前
|
存储 安全 Linux
Linux文件管理命令md5sum awk
通过结合 `md5sum`和 `awk`,不仅可以高效地进行文件完整性校验,还能灵活地处理和分析校验结果,为系统管理、数据审计等工作提供强大的支持。
55 2
|
2月前
|
监控 Linux Shell
30 个实用的 Linux 命令贴与技巧,提升你的效率(附实战案例)
本文介绍了30个实用的Linux命令及其应用场景,帮助你提升命令行操作效率。涵盖返回目录、重新执行命令、查看磁盘使用情况、查找文件、进程管理、网络状态监控、定时任务设置等功能,适合各水平的Linux用户学习和参考。
|
3月前
|
Unix Linux 开发工具
linux笔记 diff及patch的制作与使用
这篇文章是关于Linux系统中使用`diff`命令生成补丁文件以及使用`patch`命令应用这些补丁的详细教程和实战案例。
86 2
linux笔记 diff及patch的制作与使用
|
3月前
|
Linux 文件存储 数据安全/隐私保护
Linux用户组管理实战:创建、管理与删除的全面指南
在 Linux 系统中,用户组管理是实现权限控制和资源共享的关键。本文档详细介绍如何创建用户组、管理用户组成员及查看与删除用户组。首先,通过 `groupadd` 命令创建新用户组,并在 `/etc/group` 文件中记录。接着,利用 `usermod` 和 `gpasswd` 命令来添加或删除用户组成员,其中 `gpasswd` 提供更灵活的管理方式。最后,使用 `getent` 或直接读取 `/etc/group` 查看用户组信息,并通过 `groupdel` 删除空用户组。这些操作有助于高效管理和保护系统资源。
301 4
|
3月前
|
Linux 数据处理 Perl
在Linux中,awk命令的如何使用?
在Linux中,awk命令的如何使用?
|
3月前
|
数据采集 Linux
Linux源码阅读笔记20-PCI设备驱动详解
Linux源码阅读笔记20-PCI设备驱动详解