awksedvi使用说明Word文档下载推荐.docx

上传人:b****6 文档编号:22179877 上传时间:2023-02-02 格式:DOCX 页数:49 大小:54KB
下载 相关 举报
awksedvi使用说明Word文档下载推荐.docx_第1页
第1页 / 共49页
awksedvi使用说明Word文档下载推荐.docx_第2页
第2页 / 共49页
awksedvi使用说明Word文档下载推荐.docx_第3页
第3页 / 共49页
awksedvi使用说明Word文档下载推荐.docx_第4页
第4页 / 共49页
awksedvi使用说明Word文档下载推荐.docx_第5页
第5页 / 共49页
点击查看更多>>
下载资源
资源描述

awksedvi使用说明Word文档下载推荐.docx

《awksedvi使用说明Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《awksedvi使用说明Word文档下载推荐.docx(49页珍藏版)》请在冰豆网上搜索。

awksedvi使用说明Word文档下载推荐.docx

如果用File变量指定多个文件,则文件以指定的顺序处理。

程序指令

用户提供的指令控制awk命令的操作。

这些指令来自命令行的‘Program’变量或来自用-f标志和ProgramFile变量一起指定的文件。

如果指定多个程序文件,这些文件以指定的顺序串联,且使用指令的生成的顺序。

awk命令的输出

awk命令从输入文本文件中的数据产生三种类型的输出:

选定的数据可以打印至标准输出,此输出完全同于输入文件。

输入文件的选定部分可以更改。

选定数据可以更改并可打印至标准输出,此输出可以同于或不同于输入文件的内容。

可以在同一个文件上执行所有三种类型的输出。

awk命令是别的编程语言允许用户重定向输出。

通过记录和字段的文件处理

文件以下列方式处理:

awk命令扫描它的指令,并执行任何指定为在读取输入前发生的操作。

awk编程语言中的BEGIN语句允许用于指定在读取第一个记录前要执行的一组指令。

这对于初始化特殊变量特别有用。

记录分隔符变量

从输入文件读取一个记录。

记录是由记录分隔符隔开的一组数据。

记录分隔符的缺省值是换行字符,它使文件中的每一行成为一个单独的记录。

记录分隔符可以通过设置RS特殊变量来更改。

记录是相对于awk命令的指令指定的每种模式比较。

字段分隔符变量

命令指令可以指定应比较记录内的特定字段。

缺省情况下,字段由空白区(空格或跳格)隔开。

每个字段由一个字段变量表示。

记录中的第一个字段指定为$1

变量,第二个字段指定为$2变量,以此类推。

整个记录指定为$0变量。

字段分隔符可以通过在命令行使用-F标志或通过设置FS特殊变量来更改。

FS特殊变量可以设置为下列值:

空格、单个字符或扩展正则表达式。

如果一个记录与一个模式相匹配,则任何与该模式相关的操作都在该记录上执行。

在记录和每个模式比较且执行了所有指定操作以后,从输入读取下一个记录;

在从输入文件读取所有的记录之前,该进程重复。

如果已经指定了多个输入文件,则下一个文件打开,且在读取所有的输入文件之前,该进程重复。

在读取了最后一个文件中的最后一个记录后,awk命令执行任何指定为在输入处理后发生的指令。

awk编程语言中的END语句允许用户指定在读取最后一个记录后要执行的操作。

这对于发送有关awk命令完成了什么工作的消息特别有用。

awk命令编程语言

awk命令编程语言由以下格式的语句构成:

Pattern{Action}

如果一个记录与指定模式相匹配,或包含与该模式匹配的字段,则执行相关的操作。

可以指定没有操作的模式,这种情况下,包含该模式的整行写至标准输出。

为每个输入记录执行指定的没有模式的操作。

模式

在awk命令语言语法中使用四种类型的模式:

正则表达式

关系表达式

模式的组合

BEGIN和END模式

正则表达式

awk命令使用的扩展正则表达式类似于grep或egrep命令使用的表达式。

扩展正则表达式的最简单的形式就是包括在斜杠中的一串字符。

例如,假定一个名为

testfile的文件具有以下内容:

smawley,andy

smiley,allen

smith,alan

smithern,harry

smithhern,anne

smitters,alexis

输入以下一行命令:

awk'

/smi/'

testfile

将把包含smi字符串的具体值的所有记录打印至标准输出。

在这个示例中,awk命令的程序'

是一个没有操作的模式。

输出是:

以下特殊字符用于形成扩展正则表达式:

字符功能

+指定:

如果一个或多个字符或扩展正则表达式的具体值(在+(加号)前)在这个字符串中,则字符串匹配。

命令行:

/smith+ern/'

将包含字符smit,后跟一个或多个h字符,并以字符ern结束的字符串的任何记录打印至标准输出。

此示例中的输出是:

?

指定:

如果零个或一个字符或扩展正则表达式的具体值(在?

(问号)之前)在字符串中,则字符串匹配。

/smith?

/'

将包含字符smit,后跟零个或一个h字符的实例的所有记录打印至标准输出。

|指定:

如果以|(垂直线)隔开的字符串的任何一个在字符串中,则字符串匹配。

/allen

|

alan/'

将包含字符串allen或alan的所有记录打印至标准输出。

()在正则表达式中将字符串组合在一起。

/a(ll)?

(nn)?

e/'

将具有字符串ae或alle或anne或allnne的所有记录打印至标准输出。

{m}指定如果正好有m个模式的具体值位于字符串中,则字符串匹配。

/l{2}/'

打印至标准输出

{m,}指定如果至少m个模式的具体值在字符串中,则字符串匹配。

/t{2,}/'

打印至标准输出:

{m,n}指定如果m和n之间(包含的m和n)个模式的具体值在字符串中(其中m<

=n),则字符串匹配。

/er{1,2}/'

smithern,anne

[String]指定正则表达式与方括号内String变量指定的任何字符匹配。

/sm[a-h]/'

将具有sm后跟以字母顺序从a到h排列的任何字符的所有记录打印至标准输出。

此示例的输出是:

[^String]在[](方括号)和在指定字符串开头的^(插入记号)指明正则表达式与方括号内的任何字符不匹配。

这样,命令行:

/sm[^a-h]/'

~,!

~表示指定变量与正则表达式匹配(代字号)或不匹配(代字号、感叹号)的条件语句。

$1~/n/'

将第一个字段包含字符n的所有记录打印至标准输出:

^指定字段或记录的开头。

$2~/^h/'

将把字符h作为第二个字段的第一个字符的所有记录打印至标准输出。

$指定字段或记录的末尾。

$2~/y$/'

将把字符y作为第二个字段的最后一个字符的所有记录打印至标准输出。

.(句号)表示除了在空白末尾的终端换行字符以外的任何一个字符。

/a..e/'

将具有以两个字符隔开的字符a和e的所有记录打印至标准输出。

*(星号)表示零个或更多的任意字符。

/a.*e/'

将具有以零个或更多字符隔开的字符a和e打印至标准输出。

\(反斜杠)转义字符。

当位于在扩展正则表达式中具有特殊含义的任何字符之前时,转义字符除去该字符的任何特殊含义。

例如,命令行:

/a\/\//将与模式a//匹配,因为反斜杠否定斜杠作为正则表达式定界符的通常含义。

要将反斜杠本身指定为字符,则使用双反斜杠。

有关反斜杠及其使用的更多信息,请参阅以下关于转义序列的内容。

识别的转义序列

awk命令识别大多数用于C语言约定中的转义序列,以及awk命令本身用作特殊字符的几个转义序列。

转义序列是:

转义序列表示的字符

\"

\"

(双引号)

\//(斜杠)字符

\ddd其编码由1、2或3位八进制整数表示的字符,其中d表示一个八进制数位

\\\(反斜杠)字符

\a警告字符

\b退格字符

\f换页字符

\n换行字符(请参阅以下的注)

\r回车字符

\t跳格字符

\v垂直跳格

注:

除了在gsub、match、split和sub

内置函数中,扩展正则表达式的匹配都基于输入记录。

记录分隔符字符(缺省情况下为换行字符)不能嵌套在表达式中,且没与记录分隔符字符匹配的表达式。

如果记录分隔符不是换行字符,则可与换行字符匹配。

在指定的四个内置函数中,匹配基于文本字符串,且任何字符(包含记录分隔符)可以嵌套在模式中,这样模式与适当的字符相匹配。

然而,用

awk命令进行的所有正则表达式匹配中,在模式使用一个或多个NULL(空)字符将生成未定以的结果。

关系表达式

关系运算符<

(小于)、>

(大于)、<

=(小于或等于)、>

=(大于或等于)、==(等于)和!

=(不等于)可用来形成模式。

例如,模式:

$1<

$4将与第一个字段小于第四个字段的记录匹配。

关系运算符还和字符串值一起使用。

例如:

$1!

="

q"

将与第一个字段不是q的所有记录匹配。

字符串值还可以根据校对值匹配。

$1>

="

d"

将与第一个字段以字符a、b、c或d开头的所有记录匹配。

如果未给出其它信息,则字段变量作为字符串值比较。

模式的组合

可以使用三种选项组合模式:

范围由两种以,(逗号)隔开的模式指定。

操作在每个以匹配第一个模式的记录开始的每个记录上执行,并通过匹配第二个模式的记录(包含此记录)继续。

/begin/,/end/与包含字符串begin的记录以及该记录和包含字符串end之间的所有记录(包含包括字符串end的记录)匹配。

括号()将模式组合在一起。

布尔运算符||(或)&

&

(和)以及!

(不)将模式组合成如果它们求值为真则匹配,否则不匹配的表达式。

$1=="

al"

&

$2=="

123"

与第一个字段是al且第二个字段是123的记录匹配。

BEGIN和END模式

用BEGIN模式指定的操作在读取任何输入之前执行。

用END模式指定的操作在读取了所有输入后执行。

允许多个BEGIN和END模式,并以指定的顺序处理它们。

在程序语句中END模式可以在BEGIN模式之前。

如果程序仅由BEGIN语句构成,则执行操作且不读取输入。

如果程序仅由END语句构成,则在任何操作执行前读取所有输入。

操作

有多种类型的操作语句:

操作语句

内置函数

用户定义的函数

条件语句

输出操作

操作语句

操作语句括在{}(花括号)中。

如果语句指定为没有模式,则它们在每个记录上执行。

在括号里可以指定多个操作,但操作间必须以换行字符或

;

(分号),且语句以它们出现的顺序处理。

操作语句包含:

算术语句

算术运算符+(加号),-(减号),/(除号),^(幂),*(乘号),%(系数)用于格式:

表达式运算符表达式

这样语句为:

$2=$1^3

将第一个升为三次方的字段的值指定给第二个字段。

一元语句

一元-(减号)和一元+(加号)如在C编程语言中操作:

+Expression或-Expression

增量和减量语句

增量前语句和减量前语句如在C编程语言中操作:

++Variable或--Variable

增量后语句和减量后语句如在C编程语言中操作:

Variable++或Variable--

赋值语句

赋值运算符+=(加)、-=(减)、/=(除)和*=(乘)如在C编程语言中操作,格式为:

Variable+=Expression

Variable-=Expression

Variable/=Expression

Variable*=Expression

例如,语句:

$1*=$2

将字段变量$1乘以字段变量$2,然后将新值指定给$1。

赋值运算符^=(幂)和%=(系数)具有以下格式:

Variable1^=Expression1

和Variable2%=Expression2并且它们等同于C编程语言语句:

Variable1=pow(Variable1,Expression1)和Variable2=fmod(Variable2,Expression2)其中pow是pow子例程而fmod是fmod子例程。

字符串串联语句

字符串值可以通过紧挨着陈述来串联。

$3=$1$2

将字段变量$1和$2中的字符串的串联指定给字段变量$3。

内置函数

awk命令语言使用算术函数、字符串函数和一般函数。

如果打算编写一个文件,且稍后在同一个程序里读取它,则close子例程语句是必需的。

算术函数

以下算术函数执行与C语言中名称相同的子例程相同的操作:

atan2(y,x)返回y/x的反正切。

cos(x)返回x的余弦;

x是弧度。

sin(x)返回x的正弦;

exp(x)返回x幂函数。

log(x)返回x的自然对数。

sqrt(x)返回x平方根。

int(x)返回x的截断至整数的值。

rand()返回任意数字n,其中0<

=n<

1。

srand([Expr])将rand函数的种子值设置为Expr参数的值,或如果省略Expr参数则使用某天的时间。

返回先前的种子值。

字符串函数

字符串函数是:

gsub(Ere,Repl,[In])除了正则表达式所有具体值被替代这点,它和sub函数完全一样地执行,。

sub(Ere,Repl,[In])用Repl参数指定的字符串替换In参数指定的字符串中的由Ere参数指定的扩展正则表达式的第一个具体值。

sub函数返回替换的数量。

出现在Repl参数指定的字符串中的&

(和符号)由In参数指定的与Ere参数的指定的扩展正则表达式匹配的字符串替换。

如果未指定In参数,缺省值是整个记录($0记录变量)。

index(String1,String2)在由String1参数指定的字符串(其中有出现String2指定的参数)中,返回位置,从1开始编号。

如果String2参数不在String1参数中出现,则返回0(零)。

length[(String)]返回String参数指定的字符串的长度(字符形式)。

如果未给出String参数,则返回整个记录的长度($0记录变量)。

blength[(String)]返回String参数指定的字符串的长度(以字节为单位)。

substr(String,M,[N])返回具有N参数指定的字符数量子串。

子串从String参数指定的字符串取得,其字符以M参数指定的位置开始。

M参数指定为将String参数中的第一个字符作为编号1。

如果未指定N,则子串的长度将是M参数指定的位置到String参数的末尾的长度。

match(String,Ere)在String参数指定的字符串(Ere参数指定的扩展正则表达式出现在其中)中返回位置(字符形式),从1开始编号,或如果Ere参数不出现,则返回0(零)。

RSTART特殊变量设置为返回值。

RLENGTH特殊变量设置为匹配的字符串的长度,或如果未找到任何匹配,则设置为-1(负一)。

split(String,A,[Ere])将String参数指定的参数分割为数组元素A[1],A[2],...,

A[n],并返回n变量的值。

此分割可以通过Ere参数指定的扩展正则表达式进行,或用当前字段分隔符FS特殊变量)来进行(如果没有给出Ere参数)。

除非上下文指明特定的元素还应具有一个数字值,否则A数组中的元素用字符串值来创建。

tolower(String)返回String参数指定的字符串,字符串中每个大写字符将更改为小写。

大写和小写的映射由当前语言环境的LC_CTYPE范畴定义。

toupper(String)返回String参数指定的字符串,字符串中每个小写字符将更改为大写。

sprintf(Format,Expr,Expr,...)根据Format参数指定的printf子例程格式字符串来格式化

Expr参数指定的表达式并返回最后生成的字符串。

一般函数

一般函数是:

close(Expression)用同一个带字符串值的Expression参数来关闭由print或printf语句打开的或调用

getline参数打开的文件或管道。

如果文件或管道成功关闭,则返回0;

其它情况下返回非零值。

如果打算写一个文件,并稍后在同一个程序中读取文件,则

close语句是必需的。

system(Command)执行Command参数指定的命令,并返回出口状态。

等同于system子例程。

Expression|getline[Variable]从来自Expression

参数指定的命令的输出中通过管道传送的流中读取一个输入记录,并将该记录的值指定给Variable参数指定的变量。

如果当前未打开江Expression参数的值作为其命令名称的流,则创建流。

创建的流等同于调用popen子例程,此时Command参数取Expression参数的值且Mode参数设置为一个是r的值。

只要流保留打开且Expression参数求得同一个字符串,则对getline函数的每次后续调用读取另一个记录。

如果未指定Variable参数,则$0记录变量和NF特殊变量设置为从流读取的记录。

getline[Variable]<

Expression从Expression参数指定的文件读取输入的下一个记录,并将Variable参数指定的变量设置为该记录的值。

只要流保留打开且Expression参数对同一个字符串求值,则对getline函数的每次后续调用读取另一个记录。

getline[Variable]将Variable参数指定的变量设置为从当前输入文件读取的下一个输入记录。

如果未指定Variable参数,则$0记录变量设置为该记录的值,还将设置NF、NR和FNR特殊变量。

所有getline函数的格式对于成功输入返回1,对于文件结束返回零,对于错误返回-1。

用户定义的函数

用户定义的函数以下列格式说明:

functionName(Parameter,Parameter,...){Statements}

函数可以指向awk命令程序中的任何位置,且它的使用可以优先于它的定义。

此函数的作用域是全局的。

函数参数可以是标量或数组。

参数名称对函数而言是本地的;

所有其它变量名称都是全局的。

同一个名称不应用作不同的实体;

例如,一个参数不能即用作函数名称又用作特殊变量。

具有全局作用域的变量不应共享一个函数的名称。

同个作用域中的标量和数组不应具有同一个名称。

函数定义中的参数数量不必和调用函数时使用的参数数量匹配。

多余的形式参数可用作本地变量。

额外的标量初始化后具有等同于空字符串和数字值为0(零)的字符串值;

额外的数组参数初始化为空数组。

当调

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 冶金矿山地质

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

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