awk 比到目前为止一直讨论的工具都强大得多。
它是一种完整的语言,是一种解析脚本语言。换句话说,在运行它们之前,不需要编译用 awk 编写的程序。在此将给出几个简单的 awk 语句,只作为命令行的应用。可以看到,它常常在系统 shell 脚本中使用(通常也作为一个简单的单行命令),而且知道它的存在必定有用。但是如果希望 awk 能够很好地完成事情(根据程序的规则,选择和替换文本文件中的文本),应该考虑任务是否可以通过另一种更强大的脚本语言,更简单、更容易地完成(例如 Python 或 Perl)。
另一方面, awk 是一个总可使用的小得多的程序:
user@bible:~ >
cat foods
boiled carrots
fried potatoes
grilled onions
grated carrot
user@bible:~ >
awk /carrot/ foods
boiled carrots
grated carrot
在此,awk 只选择匹配 carrot 的行
user@bible:~ >
awk '{print $1}' foods
boiled
fried
grilled
grated
在此,awk 打印了每一行的第一个字段,正如 “{print $1}”的定义。使用 $2 得到第二个字段,而 $0 表示整行。
user@bible:~ >
awk -F\: '{print $}' /etc/passwd
root
bin
[...]
Guest User
也可以定义分隔符为其他字符。以上示例中,选项 -F\: 定义字段分隔符是冒号,允许从/etc/passwd选择一个特定字段(第5个,它是用户的真实名称),它是一个用冒号分隔的文件。
awk 有多个有用的内置函数。例如:
user@bible:~ >
cat morefoods
biled carrots and fried bacon
fried potatoes and grilled sausages and mushrooms
grilled onions
grated carrot
user@bible:~ >
awk 'NF > 2' morefoods
boiled carrots and fried bacon
fried potatoes and grilled sausages and mushrooms
NF 表示字段的数量。在这个示例中,通过使用 'NF>2',选择了超过两个字段的行。
常用的解决问题之处:
试解决将结构化数据导入到应用程序的问题,其中一些行有错误数量的字段,而导入失败,等等。
user@bible:~ >
awk 'NF > 2 {print $4}' morefoods
fried
grilled
在此,awk 打印了每行的第4个字段,它有两个以上的字段。
user@bible:~ >
awk '{print NF ":" $0}' morefoods
5:biled carrots and fried bacon
7:fried potatoes and grilled sausages and mushrooms
2:grilled onions
2:grated carrot
在此,awk 打印字段的数量,之后是一个冒号和整行(由 $0 表示)。
awk 脚本可以从命令行运行,使用
awk -f scriptname.file 这样的命令即可。
例如,将以下内容保存为 script.awk :
{print $1 ":" $2 ":" NF
}
END{print NR}
然后,完成以下事情:
user@bible:~ >
awk -f script.awk morefoods
boiled:carrots:5
fried:potatoes:7
grilled:onions:2
grated:carrot:2
4
文件每一行的前两个字段已经打印,它们之间是一个冒号,之后是另一个冒号和该行中的
字段数量(NF)。遍历完文件之后,END 字节打印
NR(记录数量)的值。
在系统上,GNU awk 提供了 info 文件格式的文档,输入 info awk 可查看它。最新版本的 GNU awk 手册可从
http://www.gnu.org/software/gawk/manual/得到。
摘自:《SUSE Linux 10 宝典》人民邮电出版社
分享到:
相关推荐
Linux中的`awk`命令是一个强大的文本分析工具,它允许用户基于特定的模式匹配对文本文件进行处理。在本文中,我们将深入探讨`awk`的基本概念、语法和常见用途。 首先,`awk`有三个主要版本:`awk`、`nawk`和`gawk`...
### Linux 下 awk 命令详解 #### 一、引言 `awk` 是一个功能强大的文本处理工具,在 Unix 和类 Unix 操作系统(如 Linux)中被广泛使用。它不仅可以进行模式匹配,还能执行复杂的文本处理任务。本文将详细介绍 `awk...
* AWK 可以以命令行方式、shell 脚本方式和将所有的 AWK 命令插入一个单独文件然后调用三种方式来使用。 * AWK 工作流程是读入有'\n'换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域。
Linux 主要 shell 命令、sed、awk 使用详解 本文将详细介绍 Linux 的主要 shell 命令、sed 和 awk 的使用方法和原理。shell 是用户和 Linux 操作系统之间的接口,用户可以通过 shell 输入命令来操作 Linux 系统。...
通过熟练掌握awk命令,Linux用户能够高效地处理日志文件、进行数据分析,甚至编写简单的脚本。在深入学习awk时,理解其工作原理、模式匹配机制以及如何编写复杂的动作,将极大地提升你在Linux环境中的工作效率。对于...
1. 命令行调用:在命令行中直接输入 awk 命令,适用于简单的处理任务,或者在 shell script 中嵌入 awk 命令。 2. `-f` 选项调用:将 awk 程序编写到一个文件中,通过 `-f` 选项指定该文件,让 awk 解释器执行,适用...
### Linux Awk 学习指南 #### 1. Awk 简介 Awk 是一种专门设计用于处理文本和数据的编程语言,主要用于 Linux/Unix 操作系统中。...掌握这些知识可以帮助您更好地在 Linux/Unix 环境下使用 Awk 处理文本和数据。
脚本通过使用echo命令输出文本的同时添加色彩,并通过awk命令动态计算内存使用百分比等重要系统信息。这种结合使用多种命令和脚本技术的方法,使得系统管理任务变得高效且易于维护。 cut命令在处理文本数据时也有其...
### Linux 下 awk 工具的使用详解 #### 1. awk 简介 `awk` 是一款在 Linux/Unix 环境下极其强大的文本处理工具,它能够灵活地处理各种格式的数据文件,适用于数据筛选、分析及格式转换等多种场景。`awk` 的主要优势...
### awk命令简介与应用知识点详解 #### 一、awk命令概述 `awk`是一种强大的文本处理工具,在Linux和Unix环境中非常常见。它主要用于在数据文件或其他流中执行模式扫描和处理,可以用来格式化文本输出,执行计算,...
### Linux Sed 和 Awk:文本处理利器 在Linux系统中,`sed`(Stream Editor)与`awk`是两种非常强大的文本处理工具。它们能够帮助用户高效地进行文本的搜索、替换、删除、添加等操作,是每一个系统管理员和开发者的...
基本语法通常是`awk '程序' 文件`,其中'程序'是awk命令和规则的集合,文件是要处理的文本文件。如果想从标准输入获取数据,可以省略文件名。例如,`awk 'print $0'` 将打印整个输入行。 正则表达式在awk中扮演着...
awk 命令中的域和记录使用 $0,意即所有域。 awk 中的内置变量包括 NF(域的总数)、NR(已经读取的记录数)、FILENAME(文件名)。 awk 中可以使用 if 语句来进行条件判断,例如 awk '{if($4~/Brown/) print $0}'...
- **基本命令格式**:`awk '{pattern}' filename` 或 `awk '{action}' filename`,其中 `{pattern}` 表示匹配模式,`{action}` 表示要执行的操作。 - **打印当前行**:使用 `awk '{print}' filename` 可以打印文件的...
- **Awk**:表示这个资源主要围绕AWK命令展开。 - **通用**:暗示这些例子和教程适用于广泛的场景,不仅限于特定的应用。 - **线程实例**:提醒我们这些例子可能涉及并发处理,尤其是在处理大数据时。 - **How ...
1. **命令行方式**:直接在命令行输入AWK命令,这种方式适用于简单的文本处理任务。 2. **脚本文件方式**:将AWK程序写入文件,然后通过命令行调用该文件。这种方式适合处理复杂的逻辑和较长的程序。 3. **命令解释...
#### 一、awk命令详解 **1.1 awk简介** - **定义**: awk 是一种强大的文本处理工具,也是一种编程语言,主要用于处理数据和生成报告。 - **功能**: awk 通过逐行扫描文件(或输入流),寻找匹配特定模式的文本行,...