awk字符串函数(二)

来源:互联网 发布:度量矩阵图片 编辑:程序博客网 时间:2024/04/28 01:14

substr函数 substr函数返回从字符串指定位置开始的一个子串。如果指定了子串的长度,则返回字符串的相应部分。如果指定的长度超出了字符串的实际范围,则返回其实际内容。
格式

substr(字符串,起始位置)
substr(字符串,起始位置,子串长度)

范例

$ awk '{print substr("Santa Claus",7,6)}' filename
Claus

说明:在字符串"Santa Claus" 中,打印从位置7开始、长度为6个字符的子串。


match函数:match函数返回正则表达式在字符串中出现的位置,如果未出现,则返回0。match函数把内置变量RSTART设为子串在字符串中的起始位置, RLENGTH则设为子串的长度.这些变量可以被substr函数用来提取相应模式的子串。
格式

match(字符串,正则表达式)

范例

$ awk 'END{start=match("Good ole USA",/[A-Z]+$/);print start}' filename
10

说明:正则表达式/[A-Z]+$/的意思是查找在字符串尾部连续出现的大写字母.找到的子串USA是从字符串"Good ole USA"的第10个字符开始的。如果字符串未能匹配到正则表达式,则返回0。
范例

$ awk 'END{start=match("Good ole USA",/[A-Z]+$/);\
print RSTART,RLENGTH}'
 filename
10 3
$ awk 'BEGIN{line="Good ole USA"};\
END{match(line,/[A-Z]+$/);\
print substr(line,RSTART,RLENGTH)}'
 filename
USA

说明:
1.变量RSTART被match函数设置为匹配到的正则表达式在字符串中的起始位置。变量RLENGTH则被设为子串的长度。
2.substr函数在变量line中查找子串,把RSTART和RLENGTH的值(由match函数设置)作为子串的起始位置和长度。


split函数 split函数使用由第3个参数指定的字段分隔符,把字符取拆分成一个数组。如果没有提供第3个参数,awk将把FS 的当前值作为字段分隔符。
格式

split(字符串,数组,字段分隔符)
split(字符串,数组)

范例

$ awk 'BEGIN{split("12/25/2001",date,"/");print date[2]}' filename

说明:split函数把字符串12/25/2001拆分为数组date。以正斜杠作为字段分隔符。数组date的下标从1开始。awk将打印数组date的第2个元素。


sprinf函数 sprintf函数返回一个指定格式的表达式。可以在sprintf函数中使用printf函数的格式规范。
格式

variable = sprintf("含有格式说明的字符串",表达式1 ,表达式2,...,表达式n)

范例

$ awk '{line=sprintf("%-15s %6.2f ",$1,$3);print line}' filename

说明:按照printf的规范设置第1个和第3个字段的格式(一个左对齐、长度为15的字符串和一个右对齐、长度为6个字符的浮点数)。结果被赋给用户自定义的变量line。请参见printf函数。

参考资料:http://www.linuxawk.com/jiaocheng/298.html

0 0
原创粉丝点击