每天三分钟搞定linux shell脚本(52) gawk来了!!!gawk中使用内建函数

gawk中使用内建函数

在这里插入图片描述

gawk中有一些内建函数用于处理比较通用的运算,比如数学运算和字符串处理。

1 gawk中使用数学运算的内建函数

常用的数学运算函数有sin,cos,sqrt,int等等,int是用于取整运算,输入:

gawk 'BEGIN {y=int(3.14);z=int(-3.14);print y,z}'

运行后结果为:

3 -3

2 gawk中使用字符串处理的函数

个人感觉这一节非常重要,之后可以用到的地方非常多。

2.1 toupper,tolower,length的使用

比如文本data8的内容为:

WuLinWaiZhuan,ZhaoBenShan

输入:

 gawk 'BEGIN{FS=","}{x=$1;y=toupper(x);z=tolower(x);printf("%s,   %s,   %s,   %d\n"),x,y,z,length(z)}' data8

运行后结果为:

WuLinWaiZhuan,   WULINWAIZHUAN,   wulinwaizhuan,   13

touppertolower函数将字符串分别转化成大写和小写,length返回字符串的长度。

2.2 split函数分割字符串

split是按照指定的分割字符去分割字符串,返回值是分割后的字符串的个数,输入:

echo "12:34:56:78"|gawk '{split($0,a,":");for(i=1;i<=4;i++){print a[i]}}'

运行后结果为:

12
34
56
78

当在shell脚本中去对字符串引用时候,要使用""组成的双引号。建立一个shell脚本,输入:

#/bin/bash
str=12:34:56:78
awk 'BEGIN {num=split('"\"$str\""', array, ":");for (i=1;i<=num;i++){print array[i]}}'

运行这个脚本后,结果为:

12
34
56
78

2.3 gawk中使用index函数

index(s,t)是查找字符串ts字符串索引值,如果找不到返回0index返回子字符串第一次被匹配的位置,偏移量从位置1开始.输入:

awk 'BEGIN { a="mytest";b="test";print index(a, b) }'

运行后结果为:

3

再输入:

awk 'BEGIN { a="mytest";b="ttt";print index(a, b) }'

运行后结果为:

0

2.4 gawk中使用sub和gsub函数

subgsub都是用于字符串替换,sub只会替换一行中第一次的成功匹配,gsub会替换所有的成功匹配,比如文件data8的内容为:

LinWaiZhuan,ZhaoBenShanLin

输入:

gawk 'BEGIN{FS=","}{sub("Lin","Test");print $0}' data8

运行后结果为:

TestWaiZhuan,ZhaoBenShanLin

sub函数只修改了第一个Lin为Test。
再输入:

gawk 'BEGIN{FS=","}{gsub("Lin","Test");print $0}' data8

运行后结果为:

TestWaiZhuan,ZhaoBenShanTest

gsub把所有的Lin都改成Test
注意:subgsub可以使用正则表达式,比如输入:

gawk 'BEGIN{FS=","}{gsub("^Lin","Test");print $0}' data8

运行后结果为:

TestWaiZhuan,ZhaoBenShanLin

这里用逗号把一行数据分割之后,修改以Lin开头的字段。

2.5 substr函数截取字符串

substr(str, start,len)从字符串strstart索引位置截取len长度的字符串,如果么有指定len这个参数的话,那就截取到结尾。
输入:

awk 'BEGIN { print substr( "hello world", 7,11 ) }'

运行后结果为:

world

再输入:

awk 'BEGIN { print substr( "hello world", 4 ) }'

运行后结果为:

lo world

2.6 match函数正则表达式匹配

match返回在字符串中正则表达式位置的索引,如果找不到指定的正则表达式则返回0match函数会设置内建变量RSTART为字符串中子字符串的开始位置,RLENGTH为到子字符串末尾的字符个数。substr可利于这些变量来截取字符串
输入:

awk 'BEGIN{start=match("this is a test",/[a-z]+$/); print start}'

运行后结果为:

11

再输入:

awk 'BEGIN{start=match("this is a test",/[a-z]+$/); print start, RSTART, RLENGTH }'

运行后结果为:

11 11 4
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涤除而玄览

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值