awk一些函數+簡單示例,沒有概念,實踐中記憶:
1.split //split(域名,數組,分隔符)
[root@localhost ~]# cat a
abc abd abe abf abg
[root@localhost ~]# awk '{split($0,a," "); print length(a);for(i in a) print a[i]}' a //$0按空格作爲分隔符,順序存入數組a中
5
abf
abg
abc
abd
abe
2.sub //替換函數,sub(舊字符串,新字符串,作用域)
[root@localhost ~]# echo abc abc abc abc | awk '{sub("c","k",$4); print }' //把第4個作用域的c替換爲k
abc abc abc abk
[root@localhost ~]# echo abc abc abc abc | awk '{sub("c","k"); print }' //沒寫作用域,默認匹配第一次
abk abc abc abc
3.gsub //相比sub,多了global參數
[root@localhost ~]# echo abc abc abc abc | awk '{gsub("c","k"); print }'
abk abk abk abk
[root@localhost ~]# echo abc abc abc abc | awk '{gsub("c","k",$4); print }'
abc abc abc abk
4.index //index(作用域,字符串)
[root@localhost ~]# echo abc ack | awk '{if(index($1,"k")) print "yes";else print "no"; }'
no
[root@localhost ~]# echo abc ack | awk '{if(index($2,"k")) print "yes";else print "no"; }'
yes
[root@localhost ~]# echo abc ack | awk '{print index($2,"k")}' //查到匹配字符串位置
3
5.length(s) //打印字符串長度
[root@localhost ~]# echo abcdefg hijkl | awk '{ print length($0) }'
13
6.match //match(作用域,字符串) 跟index類似
[root@localhost ~]# echo abc abk | awk '{ print match($2,"k") }'
3
[root@localhost ~]# echo abc abk | awk '{ print match($1,"k") }'
0
7.substr //截取字符串,substr(作用域,開始位置,結束位置)
[root@localhost ~]# echo abc abchelloworld | awk '{b=substr($2,4); print b}' //沒有結束位置,默認到結尾
helloworld
[root@localhost ~]# echo abc abchelloworld | awk '{b=substr($2,4,5); print b}' //第4個字符開始取出5個字符
hello
6.tolower(s) //字符串轉換爲小寫
[root@localhost ~]# echo ABC ABC ABC | awk '{print tolower($0)}'
abc abc abc
[root@localhost ~]# echo ABC ABC ABC | awk '{b=tolower($2); print b}'
abc
7.toupper(s) //字符串轉換爲大寫
[root@localhost ~]# echo abc abc abc | awk '{print toupper($0)}'
ABC ABC ABC
[root@localhost ~]# echo abc abc abc | awk '{b=toupper($2); print b}'
ABC
8.system() //執行系統命令
[root@localhost ~]# awk 'BEGIN{ print system("ls -a") }'
. .bash_logout .dmrc .gnome .ICEauthority .mysql_history .Trash
.. .bash_profile .eggcups .gnome2 install.log .nautilus .viminfo
a .bashrc .evolution .gnome2_private install.log.syslog .redhat .Xauthority
anaconda-ks.cfg .cshrc .gconf .gstreamer-0.10 .metacity .tcshrc
.bash_history Desktop .gconfd .gtkrc-1.2-gnome2 .mozilla .thumbnails
0
9.gensub() //gensub(舊字符串,新字符串,替換位置,作用域)
[root@localhost ~]# echo abaa adaa aaaa | awk '{b=gensub("a","k",3,$3); print b}'
aaka
[root@localhost ~]# echo abaa adaa aaaa | awk '{b=gensub("a","k",4,$3); print b}'
aaak
10.strftime() //時間函數
[root@localhost ~]# awk 'BEGIN{ now=strftime("%y-%m-%d %H-%M-%S"); print now}'
13-01-12 21-14-30
getline //獲取下一行,以下幾種常用用法
[root@localhost ~]# echo -e "abc\nabd\nabe" > a
[root@localhost ~]# awk 'BEGIN{ getline < "a"; print }'
abc
[root@localhost ~]# awk '/abc/{ getline tmp; print tmp; print }' a //當前行和下一行對調
abd
abc
[root@localhost ~]# awk 'BEGIN { getline < "-"; print }' //打印鍵盤輸入的內容
hello
hello
[root@localhost ~]# awk '{ getline line < "a"; print line }' a //打印出文件內容
abc
abd
abe
[root@localhost ~]# seq 10 | awk '{getline; print}' //注與BEGIN的區別,此處awk指針有跳轉
2
4
6
8
10
[root@localhost ~]# seq 10 | awk 'BEGIN{while(getline)print}' //此處awk指針沒有跳轉
1
2
3
4
5
6
7
8
9
10
next //結束當前行,讀取下一行,並從從頭執行命令
[root@localhost ~]# cat a
abc
abd
abe
[root@localhost ~]# awk '/abc/{print "yes"; next;}{ print "no"}' a
yes
no
no
exit //退出執行
[root@localhost ~]# echo -e "a\na\na\na\na\na\nb\na\na" | awk '/b/{exit;}{print "yes"}'
yes
yes
yes
yes
yes
yes