awk函数用法小记

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个字符开始,一直到结尾

你可能感兴趣的:(awk,split,gsub,sub,gensub)