b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

[awk替换了字符串linux]

电脑杂谈  发布时间:2020-04-04 22:20:36  来源:网络整理

awk 替换_awk命令_awk数组

awk内置字符串函数

gsub(r,s)在整个$ 0中用r替换r; gsub(r,s,t)在整个t时间内用s替换r

gsub功能有点类似于sed搜索和替换. 它允许将一个字符串或字符替换为另一字符串或字符,并以正则表达式的形式执行它. 第一个函数作用于记录$ 0,第二个gsub函数允许指定目标,但是,如果未指定目标,则默认值为$ 0.

index(s,t): 该函数返回查询字符串t在目标字符串s中的第一个位置.

length(s): 返回s的长度

match(s,r): 测试s是否包含与r匹配的字符串

split(s,a,fs)将s分成fs上的序列a

sprint(fmt,exp): 该函数类似于printf函数(稍后涉及),并以基本输出格式fmt返回结果字符串exp.

sub(r,s)用$ 0中最最长的子字符串替换s

substr(s,p)返回字符串s中从p开始的后缀部分

substr(s,p,n)返回字符串s的后缀部分,其长度n从p开始.

match函数测试字符串s是否包含由正则表达式r定义的匹配项.

Split使用字段分隔符fs将字符串s划分为指定的序列a.

1.gsub

要在整个记录中用另一个字符串替换一个字符串,请使用正则表达式格式/目标模式/替换模式/. 例如,将学生序列号4842更改为4899:

$ cat grade.txt

M. 棕褐色5/99 48311绿色8 40 44

J.Lulu 06/99 48317绿色9 24 26

P. 兔子02/99 4812 35 28

J.Troll 07/99 4842布朗3 12 26 26

L. Tansl 05/99 4712棕色2 12 30 28

#cd / usr / sam

#awk'gsub(/ 4842 /,4899){print $ 0}'grade.txt

J.Troll 07/99 4899布朗3 12 26 26

2. 索引

t在查询字符串s中出现的第一个位置. 该字符串必须用双引号引起来. 例如,它返回ny在目标字符串Bunny中出现的第一个位置,即字符数.

#awk'BEGIN {打印索引(“ Bunny”,“ ny”)}'grade.txt

4

3. 长度

返回所需的字符串长度,例如,检查字符串J.Troll返回名称及其长度,即由该人的姓名组成的字符数

#awk'$ 1 ==“ J.Troll” {打印长度($ 1)“” $ 1}'grade.txt

7 J.Troll

还有另一种方法,这里是双引号.

#awk'开始{打印长度(“好男人”)}'

awk命令_awk 替换_awk数组

14

4. 匹配

match测试目标字符串是否包含搜索字符的一部分. 您可以对搜索部分使用正则表达式,并且返回值是成功排列的字符数组的数量. 如果未找到,则返回0. 第一个示例在ANCD中查找d. 因为它不存在,所以它返回0. 第二个示例在ANCD中查找D. 由于它的存在,它返回D在ANCD中出现的第一个位置的字符数. 第三个示例在学生J.Lulu中寻找u.

#awk'开始{打印匹配(“ ANCD”,/ d /)}'

#awk'开始{打印匹配(“ ANCD”,/ D /)}'

4

#awk'$ 1 ==“ J.Lulu” {打印匹配($ 1,“ u”)}'grade.txt

4

5. 分裂

使用split返回字符串数组元素的数量. 工作方法如下: 如果存在包含指定分隔符的字符串(例如AD2-KP9-JU2-LP-1),则将其分成一个数组. 使用split指定定界符和数组名称. 在此示例中,命令格式为(“ AD2-KP9-JU2-LP-1”,parts_array,“-”),先拆分然后返回数组下标的数量,结果为4.

#awk'BEGIN {打印拆分(“ 123-456-789”,pats_array,“-”)}'

3

另一个示例使用了不同的定界符.

#awk'开始{打印拆分(“ 123#456#789”,myarray,“#”)}'

3

在此示例中,split返回数组myarray中的下标数目. 数组myarray的值如下:

myarray [1] = 123

myarray [2] = 456

myarray [3] = 789

6. 子

使用sub查找并替换第一次出现的模式. 字符串STR包含“ poped popo pill”,执行以下子命令sub(/ op /awk 替换,“ OP”,STR). 当图案op首次出现时,将执行替换操作,返回结果如下: “ pOPed pope pill”.

例如,学生J.Troll的记录具有两个值: “当前成绩点”和“最高成绩点”. 仅第一个更改为29,第二个仍为26,操作命令为sub(/ 26 /,“ 29”,$ 0),并且仅出现第一个26. 请注意,J.Troll记录需要存在.

#awk'$ 1 ==“ J.Troll”子(/ 26 /,“ 29”,$ 0)'grade.txt

M. 棕褐色5/99 48311绿色8 40 44

J.Lulu 06/99 48317绿色9 24 29

P. 兔子02/99 4812 35 28

J.Troll 07/99 4842布朗3 12 29 26

L. Tansl 05/99 4712棕色2 12 30 28

7. substr

substr是一个非常有用的功能. 它根据起始位置和长度返回字符串的一部分. 示例如下:

#awk'$ 1 ==“ L.Tansl” {print substr($ 1,1,3)}'grade.txt

L.T

在上面的示例中,指定域1中的第一个字符并返回前3个字符.

如果给定的长度值比字符串的长度大得多,awk将从起始位置返回所有字符. 要提取Ltansl-ey的姓氏,只需从第三个字符返回长度7. 您可以输入99的长度,而awk会返回相同的结果.

awk 替换_awk数组_awk命令

#awk'$ 1 ==“ L.Tansl” {print substr($ 1,1,99)}'grade.txt

L.Tansl

substr的另一种形式是返回字符串后缀或指定位置之后的字符. 在这里,您需要提供指定的字符串以及返回的字符串的起始位置. 例如,要从文本文件中提取姓氏,您需要操作域1awk 替换,并以第三个字符开头:

#awk'{print substr($ 1,3)}'grade.txt

卢卢

兔子

巨魔

Tansl

另一个示例是在BEGIN部分中定义一个字符串,并返回从END部分中的第t个字符中提取的子字符串.

#awk'开始{STR =“一个好人”} END {打印substr(STR,7)}'grade.txt

好男人

8. 将字符串从外壳传递到awk

Awk脚本大多只是一行,并且很少用字符串表示. 它们中的大多数都要求awk脚本在一行中完成,这很容易通过将变量传递给awk命令行来完成. 现在列举一些有关其基本原理的例子.

使用管道将备用字符串传递给awk并返回其长度.

#echo“ Stand-by” | awk'{打印长度($ 0)}'

8

将文件名设置为变量,将输出通过管道传输到awk,然后返回不带扩展名的文件名.

#STR =“ mydoc.txt”

#echo $ STR | awk'{print substr($ STR,1,5)}'

mydoc

将文件名设置为变量,并将输出通过管道传输到awk,仅返回其扩展名.

#STR =“ mydoc.txt”

#echo $ STR | awk'{print substr($ STR,7)}'

txt

字符串屏蔽顺序

在使用字符串或正则表达式时,有时需要在输出中添加换行或查询一元字符. 在打印新行(新行字符\ n)时,请给出其屏蔽顺序,以免失去其特殊含义. 用法是在字符串之前添加反斜杠. 例如,使用\ n强制打印新行.

如果使用正则表达式,请查询花括号({}),并在字符之前添加反斜杠,例如/ \ {/,这将在awk中失去其特殊含义.

awk中使用的封锁顺序

\ b退格键

\ t Tab键

\ f进纸更改

\ ddd八进制值

\ n换行

awk命令_awk 替换_awk数组

\ c其他任何特殊字符,例如\ \是反斜杠符号

\ r输入密钥

使用上述符号,打印“”,在中间按Tab键,然后再显示两行,然后打印“”,但这一次使用八进制数104、141和171表示D,a和y,分别.

#awk'开始{打印“ \ nMay \ tDay \ n \ nMay \ t \ 104 \ 141 \ 171”}'

请注意,\ 104是D的八进制ASCII码,\ 141是a的八进制ASCII码,依此类推.

awk输出功能printf

到目前为止,所有示例的输出都直接输出到屏幕上,除tab键外没有其他格式. awk提供了函数printf,它具有几个不同的格式化输出函数. 例如,按列输出,左对齐或右对齐.

每个printf函数(格式控制字符)以%符号开头,并以确定转换的字符结尾. 转换包含三个修饰符.

printf函数的基本语法为printf([格式控制字符],参数),并且格式控制字符通常用引号引起来.

printf修饰符

-左对齐

“宽度”字段的步长,0代表0步长

.prec最大字符串长度,或小数点右边的位数

awk printf格式

%c个ASCII字符

%d整数

%e浮点数,科学计数法

%f浮点数,例如(1 2 3. 4 4)

%g awk决定使用哪个浮点数转换e或f

%o八进制数

%s字符串

%x十六进制数

1. 字符转换

观察ASCII码中65的等效值. 流水线将65输出到awk. printf执行ASCII字符转换. 在此还添加了换行符,因为printf默认情况下不做换行符.

$ echo“ 65” | awk'{printf“%c \ n”,$ 0}'

A

以相同的方式使用awk可获得相同的结果.

$ awk'BEGIN {printf“%c \ n”,65}'

A

所有字符转换都相同. 以下示例显示了浮点转换后的输出“ 999”. 传递整数后,将添加六个小数点.

$ awk'BEGIN {printf“%f \ n”,999}'

999.000000

awk 替换_awk数组_awk命令

2. 格式化输出

打印所有学生姓名和序列号,要求姓名左对齐,长15个字符,后跟序列号. 注意\ n换行符位于最后一个指示符之后. 输出将自动分为两列.

#awk'{printf“%-15s%s \ n”,$ 1,$ 3}'grade.txt

M.Tans 48311

J.Lulu 48317

P.Bunny 48

J.Troll 4842

L. Tansl 4712

添加一些文本注释以帮助理解消息的含义. 您可以在文本之前嵌入标题信息. 请注意,使用print添加标题信息. 如果需要,也可以使用printf.

#awk'开始{print“ Name \ t \ tS.Number”} {printf“%-15s%s \ n”,$ 1,$ 3}'grade.txt

姓名S.Number

M.Tans 48311

J.Lulu 48317

P.Bunny 48

J.Troll 4842

L. Tansl 4712

打印输出“您叫什么名字?”如果第一个字段与employees2中的记录匹配,则使用getline函数从终端接收输入并将其发送到name变量,直到用户输入Enter.

打印“找到”,名称变量,“”,行号.

打印“ See ya”,名称变量

以上是雇员2中传递到名称变量的值的情况

$ awk'BEGIN {printf“你叫什么名字?”; \

getline名称<“ / dev / tty”} \

$ 1〜名称{print“ Found”名称“”,NR“. ”} \

END {打印“再见,”,名称为“. ”}'employees2

你叫什么名字?汤姆

在第1行找到了汤姆.

汤姆,再见.

员工不存在的情况2

$ awk'BEGIN {printf“你叫什么名字?”; \

getline名称<“ / dev / tty”} \

$ 1〜名称{print“ Found”名称“”,NR“. ”} \

END {打印“再见,”,名称为“. ”}'employees2

你叫什么名字? czm

再见,czm.


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-164136-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 元宗李璟
        元宗李璟

        大喊被美国人欺负了

      • 张洁
        张洁

        特意造了几个合格品去送检

      热点图片
      拼命载入中...