awksedvi使用说明Word文档下载推荐.docx
- 文档编号:22179877
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:49
- 大小:54KB
awksedvi使用说明Word文档下载推荐.docx
《awksedvi使用说明Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《awksedvi使用说明Word文档下载推荐.docx(49页珍藏版)》请在冰豆网上搜索。
如果用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(零)的字符串值;
额外的数组参数初始化为空数组。
当调
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- awksedvi 使用说明
![提示](https://static.bdocx.com/images/bang_tan.gif)