7.2gawk程序

sed编辑器是动态修改文本文件的便利工具,但是存在一定的局限性。gawk程序允许修改和重新组织文件中的数据。

gawk程序是Unix中原awk程序的GUN版本。awk程序在流编辑方面比sed编辑器更先进的是:它提供了一种编程语言而不仅仅是编辑器命令行。在编程语言内部,可以:

Ø  定义要保存数据的变量

Ø  使用算术和字符串操作符对数据进行运算

Ø  使用结构化编程概念,例如if-then语句和循环,将逻辑添加到数据处理过程。

Ø  通过从数据文件内抽取数据元素以及按照其他顺序或格式对它们重定位,生成带格式报告。

gawk程序的报告生成能力常用于从大文本文件中抽取数据元素,并将其格式化为易读的报告。这方面的一个完美示例是格式化日志文件。gawk程序允许从日志文件中仅筛选要查看的数据元素,然后用一种更便于阅读主要数据的方式格式化数据。

7.2.1gawk命令格式

gawk程序的基本格式是:gawk options program file。gawk程序可用的选项:

命令行选项提供在gawk程序中自定义功能的简单方法。gawak的威力在程序脚本中。可以编写脚本读取一个文本行中的数据,然后处理并显示这些数据,以创建任意类型的输出报告

7.2.2自命令行读取程序脚本

gawk程序脚本由左大括号和右大括号定义。脚本命令必须放置在两个大括号之间。由于gawk命令行假定脚本是单文本字符串,所以必须将脚本包括在单引号内。       

因为在命令行没有定义文件名,所以gawk程序从STDIN获取数据。在运行本程序时,它只能等待通过STDIN输入的文本。

由于本程序脚本设定为显示固定的文本字符串,因此无论在数据流总输入什么,都将得到相同的输出。

要结束gawk程序,必须信号说明数据流已经结束。bash shell提供了生成End-of-File(EOF)字符的组合键。在bash中,Ctrl+D组合键生成EOF字符。使用这一组合键结束gawk程序,返回命令行界面提示符。

7.2.3使用数据字段变量

gawk的主要功能之一是其处理文本文件中数据的能力。能通过自动将变量分配给每行中的每个数据元素实现这一功能。默认情况下,gawk将下面的变量分配给在文本行中检测到的每个数据字段:

u  $0表示整行文本

u  $1表示文本行中的第一个数据字段;

u  $2表示文本行中的第二个数据字段

u  $n表示文本行中的第n个数据字段

各数据字段依据文本行中的字段分隔符确定。gawk读取一行文本时,使用定义的字段分隔符描述各数据字段。gawk的默认字段分隔符是任意空白字符

改程序使用$1字段变量仅显示每个文本行的第一个数据字段。

如果读取使用不同字段分隔符的文件,可以使用-F选项指定

因为/etc/passwd文件使用冒号分隔数据字段,在gawk选项中将冒号指定为字段分隔符,并显示系统上密码文件的第一个数据字段。

7.2.4 在程序脚本中使用多个命令

如果只能执行一个命令,这样的编程语言不是特别有用。gawk编程语言允许将命令组合成普通程序。要在命令行指定的程序脚本中使用多个命令,只需在各命令之间加上一个分号。具体的操作实例:

使用管道命令,显示PPAP文件的文本信息,然后把输出给gawk程序,并把第一个字段赋值"hello ewang",然后,在屏幕输出整行文本信息。

也可以使用次提示符每次输入一行程序脚本命令:

可以每次在每行添加一个命令,知道输入后单引号。要退出该程序,只需按Ctrl+D组合键发送数据结束信号即可

7.2.5 从文件读取程序

gawk编辑器允许将程序保存在文件中并在命令行引用它们:

可以在程序中指定多个命令。要达到这一目的,只需在每行单独放置一个命令。不需要使用分号:

script1脚本定义一个变量存储print命令中使用的文本字符串。注意,引用某个变量的值时,gawk程序不像shell脚本那样使用美元符号。

7.2.6 在处理数据之前运行脚本

gawk程序运行指定运行脚本的时间。默认情况下,gawk从输入读取一行文本,然后执行程序脚本处理文本行中的数据。但有时,可能需要在处理数据之前运行脚本,例如创建报告的标题部分。为达到这一目的,要使用BEGIN关键字。这样可以强制gawk在读取数据之前,执行BEGIN关键字之后指定的程序脚本。

print命令将在读取数据之间显示文本。不过,在显示该文本之后,它将迅速退出,不等待数据输入。

原因在于BEGIN关键字仅在处理任何数据之前应用指定的脚本。如果要用正常程序脚本处理数据,则必须使用另一个脚本字段定义程序

gawk执行BEGIN脚本之后,它会使用第二段脚本处理出现的任何数据。要退出该程序只需按Ctrl+D组合键结束数据。注意,这两段脚本仍然被认为是gawk命令行上一个文本字符串。因此需要适当地放置单引号。

7.2.7 在处理数据之后运行脚本

与BEGIN关键字类似,END关键字允许指定在读取数据之后gawk执行的程序脚本。       

在按Ctrl+D组合键结束数据之后,gawk程序执行END脚本中的命令。这是在处理完所有正常的数据之后,在报告中添加页脚数据的一项优秀技术。

可以将所有这些元素一起集成到一个小小的程序脚本文件中,以根据一个简单的数据文件创建一份完整的报告:

BEGIN {
print "The latest list of users and shells"
print "  UserID        Shell"
print "-----------   -----------"
FS=":"
}{
print "  "$1"        "$7
}END{
print "This concludes the listing"
}

本脚本使用BEGIN脚本创建报告的标题部分。定义了一个特殊的变量FS,这特殊变量是定义字段分隔符的另一种方法。这样,就不必依赖使用该脚本的人在命令行选项定义字段分隔符。BEGIN脚本创建文本标题,程序脚本处理来自指定数据文件/etc/passwd的信息,END脚本生成页脚文本。

第7章 sed、gawk介绍与正则表达式-----------(gawk编辑器简单使用)相关推荐

  1. bash和sed简要介绍和相关范例

    一.bash 中如何进行条件测试: 有三种类型的测试:整数测试.字符串测试.文件测试 1.整数测试: -eq   左边的值是否等于右边 -gt   左边的值是否大于右边 -ge   左边的值是否大于等 ...

  2. linux sed替换大小写,sed命令介绍 及实例(替换换行符及大小写替换)

    一.sed命令介绍 Table of Contents 1. Sed简介 2. 定址 3. Sed命令 4. 选项 5. 元字符集 6. 实例 7. 脚本 1. Sed简介 sed是一种在线编辑器,它 ...

  3. 数据库系统概念总结:第二章 关系模型介绍

    周末无事水文章,期末备考的总结资料 第二章 关系模型介绍 2.1 关系数据的结构 关系数据库由表(table)组成,每个表有唯一的名字.一般来说,表中一行代表了一组值之间的一种联系 表中一行代表了一组 ...

  4. 编写高性能 .NET 代码 第一章:工具介绍 -- Performance Counters(性能计数器)

    Performance Counters(性能计数器) 性能计数器是监视应用程序和系统性能的最简单的方法之一.它有几十个类别数百个计数器在,包括一些.net特有的计数器.要访问这些可以通过系统自带的 ...

  5. 计算机 编程 教程 pdf,计算机专业教程-第3章编程接口介绍.pdf

    下载 第3章 编程接口介绍 • DB2 UDB应用程序概述 • 嵌入S Q L编程 • CLI/ODBC应用程序 • JAVA应用程序 • DAO .R D O .A D O应用程序 本章将介绍对DB ...

  6. mySQL 教程 第2章 安装和介绍mySQL

    第2章 安装和介绍mySQL 设置mySQL字符集 支持中文的字符集是utf8,该设置可以更改mySQL配置文件进行全局设置,也可以针对数据库设置,也可以针对表设置,也可以针对列设置.字符集更改后新插 ...

  7. 《Scikit-Learn与TensorFlow机器学习实用指南》第10章 人工神经网络介绍

    第10章 人工神经网络介绍 来源:ApacheCN<Sklearn 与 TensorFlow 机器学习实用指南>翻译项目 译者:@akonwang @friedhelm739 校对:@飞龙 ...

  8. 《Getting Started with WebRTC》第二章 WebRTC技术介绍

    <Getting Started with WebRTC>第二章 WebRTC技术介绍 本章作WebRTC的技术介绍,主要讲下面的概念:   .  怎样建立P2P的通信   .  有效的信 ...

  9. 第一章 Caché 对象介绍

    文章目录 第一章 Caché 对象介绍 Caché 对象体系结构 类定义和类字典 创建类定义 类字典 Caché类库 开发工具 Caché Studio SQL-Based Development X ...

最新文章

  1. 在Powerpoint中插入Flash的方法
  2. 【OpenCV学习】XML的读写
  3. FastDFS 集群配置(转载)
  4. 深入理解ext4等Linux文件系统
  5. unity3d : Failed to query D3D11 context for ID3DUserDefinedAnnotation interface (hr = 0x80004002)
  6. 牛客网SQL篇刷题篇(3-10)
  7. python invalid start byte_Python 3.6中 'utf-8' codec can't decode byte invalid start byte?汗血宝马...
  8. 博图如何上载wincc程序_博图导入触摸屏程序 如何通过博图下载触摸屏程序
  9. 在线协同编辑excel系统
  10. 【NLP】常见衡量指标(metrics)
  11. python search返回值_python正则表达式--match search方法
  12. SLA服务可用性4个9是什么意思?怎么达到?
  13. kafka listeners 和 advertised.listeners 的区别及应用
  14. 15Echarts:复杂数据展示
  15. 解析S2B2C模式的典型特征,应用S2B2C商城助力医疗器械企业快速发展
  16. 常用开发工具 之 SQLite 数据库 与 Navicat for SQLite 的下载、安装与简单使用说明
  17. JAVA设计模式之责任链模式
  18. 爬虫——把jason格式用pandas化成dataframe
  19. TMF大数据分析指南 Unleashing Business Value in Big Data(一)
  20. 虚拟机nat方式联网

热门文章

  1. 响铃:看脸的时代,美颜修图app如何光彩活下去?
  2. 来看Prada大秀吗?在元宇宙里那种!
  3. SSM框架 (一) SpringMVC
  4. A33-Vstar 调试串口配置
  5. 【Codeforces Round #544 (Div. 3) F2. Spanning Tree with One Fixed Degree】DFS
  6. 模拟DOS系统文件的物理结构和管理使用
  7. 声音+检测+心跳+android,带ECG显示和声音的Arduino心跳检测装置DIY
  8. mysql 8小时问题_mysql 8小时问题
  9. 基于FPGA的数字时钟(使用vivado)
  10. 词汇课程——一词多义与合成词(3)