sub匹配第一次出现的符合模式的字符串,相当于 sed 's//' 。
gsub匹配所有的符合模式的字符串,相当于 sed 's//g' 。
gensub:类似于sub,但可以控制替换的位置,g/G全局替换。
一、sub用法:
awk '{sub(/Mac/,"Macintosh");print}' urfile 用Macintosh替换Mac
awk '{sub(/Mac/,"MacIntosh",$1); print}' file 第一个域内用Macintosh替换Mac
把上面sub换成gsub就表示在满足条件得域里面替换所有的字符。
二、gsub用法:
1)echo "a b c 2011-11-22 a:d" | awk 'gsub(/-/,"_",$4)'
输出:a b c 2011_11_22 a:d
2)echo "0001|20081223efskjfdj|EREADFASDLKJCV" | awk -F '|' 'BEGIN{ OFS="|" } {sub(/[0-9]+/,"",$2);print $0}'
echo "0001|20081223efskjfdj|EREADFASDLKJCV" | awk -F '|' -v OFS='|' '{sub(/[0-9]+/,"",$2);print $0}'
输出:0001|efskjfdj|EREADFASDLKJCV
三、gensub用法:
echo "add abb aaa" | awk '{print gensub("a","1","4")}'
输出:add abb a1a
echo "11419018923 2015-01-01 00:12:46" | awk '{a=gensub("[-:]","","g",$2""$3);print $0,a}'
输出:11419018923 2015-01-01 00:12:46 20150101001246
四、split用法:
awk的内建函数split允许你把一个字符串分隔为单词并存储在数组中。
echo `date +%T` | awk '{split($0,a,":" ); print a[2]}'
echo `date +%T` | awk '{split($0,a,":" ); for (i=1; i<=3; i++) print a[i]}'
五、substr用法:
格式:
substr(s,p) 返回字符串s中从p开始的后缀部分
substr(s,p,n) 返回字符串s中从p开始长度为n的后缀部分
例子:
echo "123456789" | awk '{print substr($0,4,4)}'
4567
解释:
substr($3,10,8) ---> 表示是从第3个字段里的第10个字符开始,截取8个字符结束.
substr($3,6) ---> 表示是从第3个字段里的第6个字符开始,一直到结尾