awk 中的 内置函数:

news/2024/6/3 22:34:34 标签: 字符串, awk

文章目录

      • 字符串函数:
        • gsub(r,s) —— 将范围内所有r 替换为 s
        • sub(r,s) —— 将范围内第一个r换为s
        • length(s) —— 获取s的长度
        • index(a,b) —— 返回a中b的位置:
        • split 函数 ——切割字符串
      • 其他函数
        • asort函数 —— 根据元素值顺序排序
        • asort函数的返回值

 

这个是我自己写的 全部关于 awk学习的目录导航 ,感兴趣的可以看看。

 


只写一些我觉得会用到的 函数:
 

字符串函数:

 

gsub(r,s) —— 将范围内所有r 替换为 s

示例如下:

root@zhengzelin:~# cat test1
Bob Alice job Peter 
bob  
root@zhengzelin:~# awk '{gsub("b","B")} {print $0}' test1
BoB Alice joB Peter 
BoB  
root@zhengzelin:~# awk '{gsub("b","B",$1)} {print $0}' test1
BoB Alice job Peter
BoB

当你 指定 $1 的时候,代表只更换 $1 的字母,不指定 默认为 $0。
也可以根据"正则表达式" 来 更换:

root@zhengzelin:~# cat test1
Bob Alice job Peter 
bob  
root@zhengzelin:~# awk '{gsub("[a-z]","2",$1)} {print $0}' test1
B22 Alice job Peter
222
root@zhengzelin:~# awk '{gsub("[A-Z]","2")} {print $0}' test1
2ob 2lice job 2eter 
bob  

 


 

sub(r,s) —— 将范围内第一个r换为s

        gsub 会将所有满足条件的字符给替换掉,而 sub 只会替换掉每一行的第一个匹配的!

root@zhengzelin:~# cat test1
Bob Alice job Peter 
bob  

root@zhengzelin:~# awk '{gsub("b","z")} {print $0}' test1
Boz Alice joz Peter 
zoz  

root@zhengzelin:~# awk '{sub("b","z")} {print $0}' test1
Boz Alice job Peter 
zob  

在这里插入图片描述 


 

length(s) —— 获取s的长度

root@zhengzelin:~# cat test1
Bob Alice job Peter 
bob  
root@zhengzelin:~# awk '{print $1,length($1)}' test1
Bob 3
bob 3

当在 length() 中没有指定参数的时候,默认为 $0
root@zhengzelin:~# awk '{print $1,$2,length()}' test1
Bob Alice 20
bob  5

 


index(a,b) —— 返回a中b的位置:

root@zhengzelin:~# cat test1
Bob Alice job Peter 
bob  

root@zhengzelin:~# awk '{print index($0,"o")}' test1
2
2

使用 index函数,在每一行中寻找字符“o”,如果当前行中存在字符串“o”,则返回当前行中“o”的位置,如果不存在则返回数字“0”

如上图所示,字符“o”在每行的第二个字符,所以返回数字“2”

root@zhengzelin:~# cat test1
Bob Alice job Peter 
bob  
root@zhengzelin:~# awk '{print index($0,"job")}' test1
11
0

空格也算一个字符!

 


split 函数 ——切割字符串

 

在学习数组的时候,讲到了:"其他语言中,数组的下标是从0开始的,而awk中默认是从1开始" ;
为什么是1呢?就是因为这个函数: "split函数!"

我们可以借助 "split函数" 动态的生成"数组",而不用"手动去设置数组中每个元素的值"

        通过 “split函数” 我们可以 “将指定的字符串按照指定的分隔符切割,将切割后的每一段赋值到数组的元素中去,从而创建动态数组”
在这里插入图片描述        如上图所示:使用 split函数变量 test 里的字符串" "(空格) 为分隔符,将其划分开!然后将分开的每一段字符串自动的赋值到数组arrayname 中但是注意:我们一定发现了,上面输出元素下标的时候,是从1开始的,而不是0!

        当然,spilt函数 也是有返回值的! 它的返回值就是它将一个字符串分为了几段!
在这里插入图片描述
        使用上面的方法,有时候数组中元素输出的顺序 可能与 字符串字符的顺序不一样,原因就是在 数组那章中提到的(awk 中的数组本质 上就是 关联数组,所以 默认打印出的元素就是无顺序的!)如果出现了这种情况,建议使用下面的方法:

root@zhengzelin:~# awk -v test="bb dd aa cc " 'BEGIN{arraylen=split(test,arrayname," ");for (i=1;i<=arraylen;i++){print i,arrayname[i]}}'
1 bb
2 dd
3 aa
4 cc

解释:首先使用 split函数 生成了数组,并将 split的返回值 保存在了 "arraylen 变量"中;
然后利用 for 循环中的 变量递增,按照顺序输出了数组中的对于下标及元素值!

当然还有一种方法:就是下面的那个函数 asort:

 


 

其他函数

asort函数 —— 根据元素值顺序排序

root@zhengzelin:~# awk -v test="bb dd aa cc " 'BEGIN{split(test,arrayname," ");for (i in arrayname){print i,arrayname[i]}}'
1 bb
2 dd
3 aa
4 cc

root@zhengzelin:~# awk -v test="bb dd aa cc " 'BEGIN{split(test,arrayname," ");asort(arrayname);for (i in arrayname){print i,arrayname[i]}}'
1 aa
2 bb
3 cc
4 dd

对比一个就可以发现哪里不一样。元素值被排序后输出了!

但是,当下标不为数字的时候:在这里插入图片描述


asort函数的返回值

 
函数 asort 的返回值其实就是:数组中 元素的数量!
所以,利用这一点,我们可以这样写:
在这里插入图片描述



http://www.niftyadmin.cn/n/980391.html

相关文章

读《大型企业信息系统的架构设计》分享,附下载

2019独角兽企业重金招聘Python工程师标准>>> 很久以前下载的资料&#xff0c;但下载后都没有看过&#xff0c;今天整理硬盘&#xff0c;认真读一遍&#xff0c;发现是个好文&#xff0c;不敢说对自身有多大的提升&#xff0c;但起码理清了我之前的很多困惑&#xff…

awk 中使用 三元运算 : 条件?结果1:结果2

文章目录这个是我自己写的 全部关于 awk学习的目录导航 &#xff0c;感兴趣的可以看看。 记得我在 学习 awk 中 使用 “if…else…” 的时候&#xff1a; rootzhengzelin:~# awk BEGIN{FS":"} {if($3<500) {printf "%-20s\t%-10s\n",$1,"系统用户…

HTTP请求415错误 – 不支持的媒体类型(Unsupported media type)

HTTP请求415错误 – 不支持的媒体类型(Unsupported media type) 通常有以下情况&#xff1a; 1&#xff1a;检查你的 http 请求头信息&#xff0c;比如 因为 User-Agent 被服务器设置 拒绝请求了&#xff1b; 比如你写的的爬虫&#xff0c;就很有可能因为没有伪装成浏览器&…

【BZOJ 3566】 3566: [SHOI2014]概率充电器 (概率树形DP)

3566: [SHOI2014]概率充电器 Description 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品——概率充电器:“采用全新纳米级加工技术,实现元件与导线能否通电完全由真随机数决定!SHOI 概率充电器,您生活不可或缺的必需品!能充上电吗?现在就试试看吧!”SHOI 概…

awk 使用多个分隔符以及 打印奇偶行

文章目录1、多个分隔符 以及 连续相同的分隔符、字符串分隔符&#xff1a;2、awk 中 打印奇偶行&#xff1a;这个是我自己写的 全部关于 awk学习的目录导航 &#xff0c;感兴趣的可以看看。 1、多个分隔符 以及 连续相同的分隔符、字符串分隔符&#xff1a; 当需要指定 多个分隔…

CentOS6-64 文件名编码转换

系统&#xff1a;CentOS6-64环境&#xff1a;LNMP近日向服务器上传了几个中文命名的视频文件&#xff0c;通过web点击查看时发生错误&#xff0c;提示格式不正确。系统采用mini安装&#xff0c;但是安装了Chinese Support。通过locale -a也显示关于中文的编码&#xff0c;并且命…

通俗易懂的学习 Linux 登录系统时如何加载环境变量?(有图更方便理解)

文章目录环境变量文件的分类&#xff1a;1、用户级别文件&#xff1a;2、系统级别文件&#xff1a;正常登录系统的时候&#xff0c;环境变量文件的加载过程&#xff1a;非正常登录系统的时候&#xff0c;环境变量文件的加载过程&#xff1a;对 系统登录起作用 的环境变量配置文…

PYQT基本配置记录(二)

文章目录1、基本模版2、按钮3、单行文本4、标签5、数字输入6、多行文本7、组合选择8、进度条9、单选框10、复选框11、文件选择本文主要是针对一些常用的控件做的介绍&#xff0c;还有就是通过常用的槽函数的方法进行查找这个控件有的函数&#xff0c;以及控件的一些属性的修改 …