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)

相關文章
相關標籤/搜索