您的位置:首页 > 其它

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

2016-12-27 12:01 671 查看

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脚本生成页脚文本。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐