Shell笔记第十天 awk第四篇

本篇记录awk中内置字符串函数及其使用实例

1. 【gsub

这个函数类似于sed,用于替换字符串

用法用两种:

gsub(r,s)           在整个$0中用s替代r

gsbu(r,s,t)          在整个t中用s替代r

第1中用法作用于所有域,第2中用法作用于指定的域

本例实验前,将J.Troll的$5也改为12。

 awk 'gsub(/12/,13)' grade.txt
P.Bunny      02/99  48          Yellow   13  35   28
J.Troll          07/99  4842   Brown-3  13  13   26
L.Tansley   05/99  4713   Brown-2   13  30   28

      可以看到,$4和$5的12都被改成了13

awk 'gsub(/12/,13,$5)' grade.txt
P.Bunny      02/99 48          Yellow    13   35   28
J.Troll          07/99 4842     Brown-3 13   12   26
L.Tansley    05/99 4712    Brown-2 13    30  28
      可以看到只有$5的12被改了


2. 【index
函数原型:index (s,t)               返回s中字符串t的第一位置

 awk 'BEGIN {print index("Bunny","ny")}' grade.txt
4

字符串必须要用双引号括起来

3. 【length

函数原型:length(s) ,求字符串的长度

 awk '$1=="J.Troll" {print length($1)}' grade.txt
7
计算字符串长度

 

4. 【match

函数原型:match(s,r)  测试 s 是否包含匹配 r 的字符串

 awk 'BEGIN {print match("ANCD",/D/)}' grade.txt
 4
查找目标字符串在源字符串中的位置,目标字符串可以是正则表达式的形式

 

5. 【split
函数原型:split(s,a,fs)

 在f s上将s分成序列a,返回数组元素个数,

例如一个字符串为137-1234-2345-987,以 - 为分隔符分成4个元素

 awk 'BEGIN {print split("137-1234-2345-987",myarray,"-")}'
4


5 【sub

函数原型: sub(r,s) 用$0左边最长的字串代替s

awk '{if($1=="J.Troll") {sub(/26/,"29") ;print $0}}' grade.txt | tee grade.txt
J.Troll          07/99  4842    Brown-3  12   
29  26

可以看出,在匹配出J.Troll的记录后,只有第一个26被改为了29,第二个没有改。


6. 【substr

substr有两种用法:

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

substr(s,p,n) 返回字符串s中从p位置开始的n个字符

 awk '{if($1=="L.Tansley") {print substr($1,3,3)}}' grade.txt
Tan

 awk '{if($1=="L.Tansley") {print substr($1,3)}}' grade.txt
Tansley






你可能感兴趣的:(Shell笔记第十天 awk第四篇)