ImageVerifierCode 换一换
格式:DOCX , 页数:38 ,大小:35.98KB ,
资源ID:18650704      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/18650704.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(脚本语言AWKWord文档格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

脚本语言AWKWord文档格式.docx

1、FNR当前的处理记号(读入了多少域数据?)OFS输出的字段分隔符,默认为空格例如:awk从资料文件emp.dat中读入第一笔数据行:A125 Jenny 10 0 210 之后, 程序中:$0 之值将是 $1 之值为 A125$2 之值为 Jenny$3 之值为 100$4 之值为 210$NF 之值为 4$NR 之值为 1$FILENAME 之值为 emp.dat7.awk的工作流程:执行awk时, 它会反复进行下列四步骤:1. 自动从指定的数据文件中读取一个数据行.2. 自动更新(Update)相关的内建变量之值.如:NF,NR,$0.3. 依次执行程序中所有的Pattern Action

2、s指令.4. 当执行完程序中所有Pattern Actions时, 若数据文件中还有未读取的数据, 则反复执行步骤1到步骤4.awk会自动重复进行上述4个步骤, 使用者不须于程序中编写这个循环(Loop).8,打印文件中指定的字段数据并加以计算:awk处理数据时,它会自动从数据文件中一次读取一笔记录,并会将该数据切分成一个个的字段;程序中可使用$1,$2,. 直接取得各个字段的内容.例:以文件emp.dat为例,计算每人应发工资并打印报表.$ awk print $2,$3*$4 emp.dat结果:Jenny21000Dan23650Max27170John27500Linda19950执行

3、awk的语法为:$awk awk程序 欲处理的资料文件文件名本范例中的 程序部分为print $2,$3*$4.把程序置于命令行时, 程序之前后须以括住.print的参数间彼此以隔开, 印出数据时彼此间会以空白隔开.将上述的程序部分(print $2,$3*$4)储存于文件pay1.awk中.执行命令时再指定awk程序文件之文件名.这是执行awk的另一种方式, 特别适用于程序较大的情况, 其语法如下:$ awk -f awk程序文件名 数据文件文件名故执行下列两命令,将产生同样的结果:$ awk -f pay1.awk emp.datprint $2, $3*$4读者可使用-f参数,让awk主

4、程序使用“其它仅含awk函数的文件中的函数”其语法如下:$ awk -f awk主程序文件名 -f awk函数文件名 数据文件文件名awk中也提供与C语言中类似用法的printf()函数. 用法一样:编辑另一个awk程序如下, 并取名为 pay2.awk: printf(%6s Work hours: %3d Pay: %5dn, $2,$3,$3*$4)执行下列命令$awk -f pay2.awk emp.datJenny Work hours: 100 Pay: 21000Dan Work hours: 110 Pay: 23650Max Work hours: 130 Pay: 2717

5、0John Work hours: 125 Pay: 27500Linda Work hours: 95 Pay: 199509.选择符合指定条件的记录:awk中除了,=,!=,.等关系运算符(Relational Operators)外,另外提供(match),!(Not Match)二个关系运算符.利用这两个运算符,可判断某字符串是否包含能匹配所指定正则表达式的子字符串.组装部门员工调薪5%,(组装部门员工之ID以开头)所有员工最后之薪资率若仍低于100,则以100计:编写如下之程序, 并取名adjust1.awk :$1/A.*/ $3*=1.05 $3100 $3=100printf(

6、%s %8s %dn, $1,$2,$3)执行下列命令:$awk -f adjust1.awk emp.datA125 Jenny 105A341 Dan 115P158 Max 130P148 John 125A123 Linda 100说明:awk的工作程序是:从数据文件中每次读入一个数据行,依序执行完程序中所有的Pattern Action指令:第一个Pattern Action:$1/A.*/ $3*=1.05第二个Pattern Action:$3 100 $3=100第三个Pattern Action:,$1,$2,$3) 再从数据文件中读进下一笔记录继续进行处理.建立一个数据文件

7、,并取名为reg.dat此为一学生注册的资料文件;第一栏为学生姓名,气候为该生所修课程。MaryO.S.Arch.DiscreteSteveD.S.AlgorithmArch.WangDiscreteGraphicsO.S.LisaGraphicsA.I.LilyDiscreteAlgorithm10.awk中数组的特性:使用字符串当数组的下标(index).使用数组前不须宣告数组名及其大小.希望用数组来记录reg.dat中各门课程的修课人数:有2个学生修O.S.,则以Number=2表之.若修的人数增加一人,则Number=Number+1或Number+.11.取出数组中存储的信息:awk

8、提供了一个指令,藉由该指令awk会自动找寻数组中使用过的所有下标.使用该指令时,须指定所要找寻的数组,及一个变量.awk会使用该的变量来记录从数组中找到的每一个下标.for(course in Number).指定用course来记录awk从Number中所找到的下标.awk每找到一个下标时,就用course记录该下标之值且执行.中之指令.统计各科修课人数,并印出结果.建立如下程序,并取名为 course.awk:for(i=2;i=NF;i+) Number$i+ENDfor(course in Number) printf(%10s %dn, course,Numbercourse)执行下

9、列命令 :$awk -f course.awk reg.datGraphics 2O.S. 2Discrete 3A.I. 1D.S. 1Arch. 2Algorithm 2Pattern Actions指令中END为awk之保留字,为Pattern的一种.END成立(其值为true)的条件是:awk处理完所有数据,即将离开程序时.平常读入数据行时,END并不成立,故其后的Actions并不被执行;唯有当awk读完所有数据时,该Actions才会被执行(注意,不管数据行有多少笔,END仅在最后才成立,故该Actions仅被执行一次.)BEGIN与END有点类似,是awk中另一个保留的Patte

10、rn.唯一不同的是:以BEGIN为Pattern的Actions于程序一开始执行时, 被执行一次.awk程序中若含有以 $ 开头的自定变量, 都将以如下方式解释 :以i=2为例,$i=$2表第二个字段数据.(实际上,$在awk中为一运算符(Operator),用以取得字段数据.)12.awk程序中使用shell命令:awk程序中允许呼叫Shell指令.写一个awk程序来打印出线上人数.将下列程序建文件, 命名为 count.awkBEGIN while ( who | getline ) n+print n并执行下列命令 :$ awk -f count.awk显示在线人数.awk程序并不一定要

11、处理数据文件.以本例而言,仅输入程序文件count.awk,未输入任何数据文件.BEGIN只在awk开始执行程序,尚未开启任何输入文件前,被执行一次.(注意:只被执行一次).字符串当成Shell上的命令,并将该命令送往Shell执行,执行的结果(原先应于屏幕印出者)则藉由pipe送进awk程序中.getline为awk所提供的输入指令. 其语法如下 :语法由何处读取数据数据读入后置于getline var (输出到一个新产生的文件)或(添加输出的数据到文件末尾).在到班数据文件arr.dat之前增加一行抬头ID Number Arrival Time,并产生报表输出到文件today_rpt1中

12、.建立如下文件并取名为reformat1.awk:BEGIN print ID Number Arrival Time today_rpt1print = %s %sn, $1,$2 ) 执行:$ awk -f reformat1.awk arr.dat将产生文件today_rpt1,其内容如下:ID Number Arrival Time=awk程序中,文件名称today_rpt1的前后须以括住,表示today_rpt1为一字符串常量.若未以括住,则today_rpt1将被awk解释为一个变量名称.在awk中任何变量使用之前,并不须事先声明.其初始值为空字符串(Null string)或0.

13、因此程序中若未以将today_rpt1括住,则today_rpt1将是一变量,其值将是空字符串,这会在执行时造成错误.14.awk中利用系统资源:将数据按员工ID排序后再输出到文件today_rpt2,并于表头附加执行时的日期.分析:awk程序中pipe可接受下列两种语法:(1)awk output 指令 | Shell 接受的命令 (如:print $1,$2 | sort -k 1(2) | awk input 指令 (如:ls | getline).awk input指令只有getline一个.awk output指令有print,printf()二个.在(1)语法中,awk所输出的数据

14、将转送往Shell,由Shell的命令进行处理.以上例而言,print所输出的数据将经由Shell命令排序后再送往屏幕(stdout).上列awk程序中,print$1, $2可能反复执行很多次,其输出的结果将先暂存于pipe中,等到该程序结束时,才会一并进行不论print $1,$2被执行几次,的执行时间是awk程序结束时的执行次数是一次在(2)语法中,awk将先调用Shell命令.其执行结果将通过pipe送入awk程序,以上例而言,awk先让Shell执行,Shell执行后将结果存于pipe,awk指令getline再从pipe中读取数据.awk立刻调用Shell来执行,执行次数是一次.g

15、etline则可能执行多次(若pipe中存在多行数据).建立如下文件并取名为reformat2.awk:# 程序 reformat2.awk# 这程序用以练习awk中的pipedate | getline # Shell 执行 . getline 取得结果并以$0记录 Today is , $2, $3 today_rpt2=close( )printf( %s %sn, $1 ,$2 ) | sort -k 1 执行如下命令:$ awk -f reformat2.awk arr.dat执行后,系统会自动将sort后的数据追加到文件today_rpt2末端.Today is 09月 21日=a

16、wk提供另一个调用Shell命令的方法,即使用awk函数system(shell命令)例如:BEGINsystem(date date.datgetline date.datToday is , $2, $3但使用system(shell 命令)时,awk无法直接将执行中的部分数据输出给Shell命令.且Shell命令执行的结果也无法直接输入到awk中(可采用中间文件存储).15.执行awk程序:将awk程序直接写在shell script之中.此后使用者执行awk程序时,就不需要每次都键入awk -f program datafile建立一个简单的awk程序mydump.awk,如下:pri

17、ntprint之后未接任何参数时,表示print $0若欲执行该awk程序,来印出文件today_rpt1及today_rpt2的内容时, 执行下列命令:方式一:awk -f mydump.awk today_rpt1 today_rpt2方式二:awk print today_rpt1 today_rpt2第二种方式系将awk程序直接写在Shell的命令行上,这种方式仅适合较短的awk程序.方式三:建立如下之shell script,并取名为mydisplay:#!/bin/sh# 注意以下的awk与之间须有空白隔开 $*# 注意以上的与$*之间须有空白隔开执行mydisplay之前,须先将

18、它改成可执行的文件(此步骤往后不再赘述).请执行如下命令:$ chmod +x mydispaly往后使用者就可直接把mydisplay当成指令,来display任何文件,例如:$ ./mydisplay today_rpt1 today_rpt2在script文件mydisplay中,指令与第一个之间须有空格(Shell中并无 awk指令).第一个用以通知Shell其后为awk程序.第二个则表示awk程序结束.故awk程序中一律以括住字符串或字符,而不使用,以免Shell混淆.$*为shell script中的用法,它可用来代表命令行上mydisplay之后的所有参数. 例如:$ mudis

19、play today_rpt1 today_rpt2事实上Shell已先把该指令转换成: print today_rpt1 today_rpt2本例中,$*用以代表today_rpt1 today_rpt2.在Shell的语法中,可用$1代表第一个参数,$2代表第二个参数.当不确定命令行上的参数个数时,可使用$*表之.awk命令行上可同时指定多个数据文件,例如:$ awk -f dump.awk today_rpt1 today_rpt2某些awk程序仅包含以BEGIN为Pattern的指令.执行这种awk程序时,awk并不须开启任何数据文件.此时命令行上若指定一个不存在的数据文件,并不会产生

20、无法打开文件的错误.awk会将Shell命令行上awk程序(或-f程序文件名)之后的所有字符串,视为将输入awk进行处理的数据文件文件名.若执行awk的命令行上未指定任何数据文件文件名,则将stdin视为输入之数据来源,直到输入end of file(Ctrl-D)为止.可利用这个特点,设计可与awk即时聊天的程序.16.改变awk切割字段的方式及自定义函数:awk不仅能自动分割字段,也允许使用者改变其字段切割方式以适应各种格式之需要.使用者也可自定义函数,若有需要可将该函数单独写成一个文件,以供其它awk程序调用.若八点为上班时间,请加注于迟到记录之前,并计算平均上班时间.注:awk中字符串

21、26与数字26并无差异,可直接做字符串或数学运算,这是awk重要特色之一.方法一:对到达时间($2)d:dd或dd:dd进行字符串运算,分别取出到达的小时数及分钟数.length(字符串):返回该字符串的长度.substr(字符串,起始位置,长度):返回从起始位置起,指定长度之子字符串.若未指定长度,则返回从起始位置到字符串末尾的子字符串.则:小时数=substr($2,1,length($2)-3)分钟数=substr($2,length($2)-2)方法二:字段分隔字符FS(field seperator)是awk的内建变量,其默认值是空白及tab.awk每次切割字段时都会先参考FS的内容.若把:也当成分隔字符,则awk便能自动把小时数及分钟数分隔成不同的字段.故令FS= t:+(注:+为一Regular Expression).Regular Expression中使用中括号.表示一个字符集合,用以表示任意一个位于两中括号间的字符.故可用表示一个空白,tab或 .Regular Expression中使用+形容其前方的字符可出现一次或一次以上. 故

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1