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天前
|
存储 Shell Linux
操作系统实战(一)(linux+C语言)
本篇文章重点在于利用linux系统的完成操作系统的实验,巩固课堂知识
|
1天前
|
NoSQL Java Linux
linux笔记
linux笔记
8 0
|
2天前
|
Linux Perl
Linux|了解如何使用 awk 内置变量
Linux|了解如何使用 awk 内置变量
11 1
|
3天前
|
数据挖掘 Linux vr&ar
Linux命令实战:解决日常问题的利器
Linux命令实战:解决日常问题的利器
|
4天前
|
安全 Linux Shell
Linux常用命令详解与实战应用
【5月更文挑战第7天】本文详述了Linux常用命令,包括文件与目录操作(ls, cd, pwd, cp, mv, rm)、文本处理(cat, grep, sed)及系统管理(top, df, du)命令。通过实例演示了如何使用这些命令,帮助读者理解和掌握Linux操作,提升系统管理效率。学习和熟练运用这些基础命令,是高效使用Linux的关键。
|
5天前
|
存储 运维 Java
Linux笔记02 —— Shell补充
Linux笔记02 —— Shell补充
30 2
|
5天前
|
安全 Linux Shell
Linux笔记01 —— Linux初识与Shell汇总(请配合另一篇《Linux笔记02》一起使用)
Linux笔记01 —— Linux初识与Shell汇总(请配合另一篇《Linux笔记02》一起使用)
18 1
|
6天前
|
安全 Linux Android开发
FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库
该文介绍了如何在Linux服务器上交叉编译Android的FFmpeg库以支持HTTPS视频播放。首先,从GitHub下载openssl源码,解压后通过编译脚本`build_openssl.sh`生成64位静态库。接着,更新环境变量加载openssl,并编辑FFmpeg配置脚本`config_ffmpeg_openssl.sh`启用openssl支持。然后,编译安装FFmpeg。最后,将编译好的库文件导入App工程的相应目录,修改视频链接为HTTPS,App即可播放HTTPS在线视频。
FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库
|
10天前
|
运维 监控 Linux
提升系统稳定性:Linux内核参数调优实战
【5月更文挑战第1天】 在运维领域,保障服务器的高效稳定运行是核心任务之一。Linux操作系统因其开源、可靠和灵活的特点被广泛应用于服务器中。本文将深入探讨通过调整Linux内核参数来优化系统性能,提升服务器的稳定性和响应能力。文章首先介绍了内核参数调优的必要性和基本原则,然后详细阐述了调优过程中的关键步骤,包括如何监控当前系统状态,确定性能瓶颈,选择合适的参数进行调优,以及调优后的测试与验证。最后,文中提供了一些常见问题的解决策略和调优的最佳实践。
52 5