awk用法整理

gensub()函数ide

对于函数

Thu Jan 12 14:36:25 2017 TCP from 192.168.222.128:9300 to 112.168.222.129:46471 44 bytes,it

句子,把最后一个:变成空白class

echo "Thu Jan 12 14:36:25 2017 TCP from 192.168.222.128:9300 to 112.168.222.129:46471 44 bytes," | awk '{print gensub (":"," ",4)}'awk

Thu Jan 12 14:36:25 2017 TCP from 192.168.222.128:9300 to 112.168.222.129 46471 44 bytes,项目

":"匹配冒号," "把冒号变成空白,4是这一句里面的第4个冒号,若是是g或者G的话,就是全局替换。gensub有4项目,最后一个能够省略,默认省略的是$0,若是写成这样awk '{print gensub (":"," ",4,$0)}',效果相同。di


echo "Thu Jan 12 14:36:25 2017 TCP from 192.168.222.128:9300 to 112.168.222.129:46471 44 bytes," | awk '{print gensub (":"," ",2,$4)}'view

14:36 25vi

这就是以空白为分隔符,对第4个字段(14:36:25)里面,替换第2个冒号为空白。co


echo "aaa bbb" | awk '{print gensub(/(.+) (.+)/,"\\2 \\1","g")}'

bbb aaa

这就完成了替换。


echo "xaax xbx xxx:xaax xbx xxx" | awk -F: -vOFS=":" '{$2=gensub(/x([^x]+)x/,"\\
1YY",2,$2)}1'
xaax xbx xxx:xaax bYY xxx

这个比较复杂。冒号分列,$2对后半操做,2是针对/x([^x]+)x/匹配第二次,()是匹配的b,被\\
1调用,\要写2次,而后赋值给$2,最后的1至关于;print 


gsub()函数

echo "Thu Jan 12 14:36:25 2017 TCP from 192.168.222.128:9300 to 112.168.222.129:46471 44 bytes," | awk 'gsub (":","!",$4)'

Thu Jan 12 14!36!25 2017 TCP from 192.168.222.128:9300 to 112.168.222.129:46471 44 bytes,

和gensub()函数很相近,可是若是按照它的写法,得出的结论却不同

echo "Thu Jan 12 14:36:25 2017 TCP from 192.168.222.128:9300 to 112.168.222.129:46471 44 bytes," | awk '{print gsub (":","")}'
4

结果是4,等因而返回冒号出现的次数。

另外就是不能处理符号“.”,被当成任义的意思了,要加上两个\\

echo "Thu Jan 12 14:36:25 2017 TCP from 192.168.222.128:9300 to 112.168.222.129:46471 44 bytes," | awk 'gsub ("\\.","")'
Thu Jan 12 14:36:25 2017 TCP from 192168222128:9300 to 112168222129:46471 44 bytes,


sub()函数

echo "11111 22222 44444" | awk 'sub(/22222/,"33333")'
11111 33333 44444

echo "11111 22222 44444 22222" | awk 'sub(22222,33333)'
11111 33333 44444 22222

第二次出现的22222不被替换,只替换第一个。也能够指定域,sub(22222,33333,$0)

相关文章
相关标签/搜索