
awk提供了许多强大的字符串函数,在这里供记录,以备将来使用.
awk内置字符串函数
gsub(r,s)在整个$ 0中用r替换r
gsub(r,s,t)在整个t时间内用s替换r
索引(s,t)
返回字符串t在s中的第一个位置
长度(s)
返回长度
匹配(s,r)
测试s是否包含与r匹配的字符串
split(s,a,fs)将s分成fs上的序列a
sprint(fmt,exp)返回以fmt格式化的exp
sub(r,s)
用$ 0中最长的子字符串替换s
substr(s,p)返回字符串s中从p开始的后缀部分
substr(s,pawk 判断空字符串,n)
返回从p开始且长度为n的字符串s的后缀部分
详细说明如何使用每个功能.
gsub功能有点类似于sed搜索和替换. 它允许将一个字符串或字符替换为另一字符串或字符,并以正则表达式的形式执行它. 第一个函数作用于记录$ 0,第二个gsub函数允许指定目标,但是,如果未指定目标,则默认值为$ 0.
The
index(s,t)函数返回查询字符串t在目标字符串s中的第一位置. 长度函数返回字符串的字符

长度. match函数测试字符串s是否包含由正则表达式r定义的匹配项. split使用域分隔符fs
字符串s被划分为指定的序列a. sprint函数类似于printf函数(稍后讨论),返回基本输出格式fmt
结果字符串exp. sub(r,s)函数用s替换$ 0中最左边最长的子字符串awk 判断空字符串,并与(r)匹配
sub(s,p)返回位置p之后的字符串s的后缀. substr(s,p,n)与上面的相同,并将子字符串的长度指定为n.
接下来,我们在awk中查看这些字符串函数的功能.
1.gsub
要在整个记录中用另一个字符串替换一个字符串,请使用正则表达式格式/目标模式/替换模式
/. 例如,将学生序列号4842更改为4899:
$ awk'gsub('4842 /,4899){print $ 0}'grade.txt
J.Troll 07/99 4899布朗3 12 26 26
2.index
t在查询字符串s中出现的第一个位置. 该字符串必须用双引号引起来. 例如,返回目标字符串
ny在兔子中出现的第一个位置是字符数.
$ awk'BEGIN {打印索引(“ Bunny”,“ ny”)} grade.txt
4
3.length
返回所需的字符串长度,例如,检查字符串J.Troll返回名称及其长度,即该人姓名的字符
编号.
$ awk'$ 1 ==“ J.Troll” {打印长度($ 1)“” $ 1}'grade.txt
7 J.Troll
还有另一种方法,这里是双引号.

$ awk'开始{打印长度(“一个好男人”)}'
14
4.match
match测试目标字符串是否包含搜索字符的一部分. 您可以对搜索部分使用正则表达式,然后返回
返回值是成功排列的字符数. 如果未找到,则返回0. 第一个示例在ANCD中查找d. 因为不是
存在,因此返回0. 第二个示例在ANCD中查找D. 由于它的存在,返回到D在ANCD中出现的第一位置
设置字符数. 第三个示例在学生J.Lulu中寻找u.
$ awk'{BEGIN {print match(“ ANCD”,/ d /)}'
$ awk'{BEGIN {print match(“ ANCD”,/ C /)}}'
3
$ awk'$ 1 ==“ J.Lulu” {打印匹配($ 1,“ u”)} grade.txt
4
5.split
使用split返回字符串数组元素的数量. 它的工作方式如下: 如果有字符串,则包含指定的分隔符
Symbol-(例如AD2-KP9-JU2-LP-1)将其分成一个数组. 使用split指定定界符和数组名称. 这个
在示例中,命令格式为(“ AD2-KP9-JU2-LP-1”,parts_array,“-”),拆分后返回数组下标的数量,
结果
是4.
另一个示例使用了不同的定界符.
$ awk'{BEGIN {print split(“ 123#456#678”,myarray,“#”)}'
3

在此示例中,split返回数组myarray中的下标数目. 数组myarray的值如下:
Myarray [1] =“ 123”
Myarray [2] =“ 456”
Myarray [3] =“ 789”
6.sub
使用sub查找并替换第一次出现的模式. 字符串STR包含“ popedpopopill”,执行它
列子命令sub(/ op /,“ op”,STR). 当图案op首次出现时,将执行替换操作,返回结果如下:
“ pOPedpopepill”.
假设学生J. Troll的记录在grade.txt文件中具有相同的值,即“当前成绩点”和“最高成绩点”. 仅
将第一个更改为29,第二个保留为24,操作命令为sub(/ 26 /,“ 29”,$ 0),仅替换第一个.
位置24.
$ awk'$ 1 ==“ J.Troll”子(/ 26 /,“ 29”,$ 0)'grade.txt
L.Troll 07/99 4842布朗3 12 29 26
L.Transley 05/99 4712布朗2 12 30 28
7.substr
substr是一个非常有用的功能. 它根据起始位置和长度返回字符串的一部分. 示例如下:
$ awk'$ 1 ==“ L.Transley” {print substr($ 1,1,5)}'grade.txt
L.Tan
在上面的示例中,域1中指定的第一个字符开始,并返回前5个字符.
如果给定的长度值比字符串的长度大得多,awk将从起始位置返回所有字符. 要提取L. Tansley的姓氏,只需从第三个字符返回长度为7. 您可以输入长度99,awk返回相同的结果.
$ awk'{$ 1 ==“ L.Transley” {print substr($ 1,3,99)}'grade.txt

Transley
substr的另一种形式是返回字符串后缀或指定位置之后的字符. 在这里,您需要提供指定的字符串以及返回的字符串的起始位置. 例如,要从文本文件中提取姓氏,您需要在字段1中进行操作,并以第三个字符开头:
$ awk'{print substr($ 1,3)}'grade.txt
巨魔 p>
Transley
另一个示例,在BEGIN部分中定义一个字符串,并返回从END部分中的第t个字符中提取的子字符串.
$ awk'{BEGIN STR =“几个好人”} END {打印substr(STR,7))grade.txt
好男人
8. 将字符串从外壳传递到awk
Awk脚本大多只是一行,并且很少用字符串表示. 通过将变量传递到awk命令行,这将很容易. 现在列举一些有关其基本原理的例子.
使用管道将备用字符串传递给awk并返回其长度.
$ echo“ Stand-by” | awk'{打印长度($ 0)}'
8
将文件名设置为变量,将输出通过管道传输到awk,然后返回不带扩展名的文件名.
$ STR =“ mydoc.txt”
$ echo $ STR | awk'{print subst($ STR,1,5)}'
mydoc
将文件名设置为变量,并将输出通过管道传输到awk,仅返回其扩展名.
$ STR =“ mydoc.txt”
$ echo $ STR | awk'{print substr($ STR,7)}'
txt
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-177744-1.html
听说大多都是在威海卫港区里被人家炸成的
1
只求唯凯源的不要觉得这和你家凯源魅力有啥关系