Linux之a(chǎn)wk內(nèi)置函數(shù)的使用

  1. awk為程序員們提供了非常豐富的內(nèi)置函數(shù)撬呢,現(xiàn)在這里分享下我所了解和用過的awk內(nèi)置函數(shù)

    • 算數(shù)函數(shù) :[ 3個(gè) ] rand()贬派、srand()次屠、int()
    • 字符串函數(shù):[ 5個(gè) ] gsub()丙者、sub()扎唾、length()、index()酌予、split()
    • 時(shí)間函數(shù):[ 1個(gè) ] systime()
    • 數(shù)組排序函數(shù):[ 2個(gè) ] asort()磺箕、asorti()
  2. 算數(shù)函數(shù)

  1. rand():rand函數(shù)可以生成隨機(jī)數(shù),但是在使用rand函數(shù)時(shí)需要配合srand函數(shù)抛虫,否則rand函數(shù)返回的值將一直不變松靡。
  2. srand():配合rand函數(shù)使用,生成隨機(jī)數(shù)建椰。
  3. int():截取數(shù)字整數(shù)部分的值雕欺。
(1)rand()
[zkpk@master as]$ awk 'BEGIN{print rand()}'
0.237788
[zkpk@master as]$ awk 'BEGIN{print rand()}'
0.237788
[zkpk@master as]$ awk 'BEGIN{print rand()}'
0.237788
[zkpk@master as]$ awk 'BEGIN{print rand()}'
0.237788
#上面示例可以說明rand()產(chǎn)生隨機(jī)數(shù),但之后一直不變(rand每次產(chǎn)生一個(gè)0~1之間的隨機(jī)數(shù)且不包含0或1)

(2)srand()
[zkpk@master as]$ awk 'BEGIN{srand();print rand()}'
0.197708
[zkpk@master as]$ awk 'BEGIN{srand();print rand()}'
0.659169
[zkpk@master as]$ awk 'BEGIN{srand();print rand()}'
0.659169
[zkpk@master as]$ awk 'BEGIN{srand();print rand()}'
0.652366
#配合srand函數(shù)再使用rand函數(shù)產(chǎn)生的隨機(jī)數(shù)每次都不一樣

(3)int
[zkpk@master as]$ awk 'BEGIN{srand();print int(100*rand())}'
4
[zkpk@master as]$ awk 'BEGIN{srand();print int(100*rand())}'
53
[zkpk@master as]$ awk 'BEGIN{srand();print int(100*rand())}'
96
[zkpk@master as]$ awk 'BEGIN{srand();print int(100*rand())}'
24
#使用int函數(shù)取其整數(shù)部分

3.字符串函數(shù)

  1. gsub():會替換指定范圍內(nèi)所有符合條件的字符
  2. sub(): 只會替換指定范圍內(nèi)第一次匹配符合條件的字符
  3. length():獲取字符串的長度
  4. index():獲取指定字符位于字符串的位置
  5. split():可以將指定字符串分割,將切割后的每一段賦值到數(shù)組的元素中,從而動態(tài)的創(chuàng)建數(shù)組,返回值就是創(chuàng)建的數(shù)組的長度( 創(chuàng)建的數(shù)組下標(biāo)是從1開始的 )
(1)gsub()
[zkpk@master as]$ cat test
AAAAA
AxyzA
[zkpk@master as]$ awk '{gsub("A","a",$1);print $1}' test
aaaaa
axyza
#使用gsub()相當(dāng)與全局替換( global sub )

(2)sub
[zkpk@master as]$ awk '{sub("A","a",$1);print $1}' test
aAAAA
axyzA
#使用sub只會替換指定范圍內(nèi)第一次匹配符合條件的字符

#注:gsub()還支持一些正則表達(dá)式( 值都要用雙引號( " " )括起來,不可以用單引號(' ') )
[zkpk@master as]$ cat test2
aBcDeFg
ABDGQ??
[zkpk@master as]$ awk '{gsub("[A-Z]","+",$1);print $1}' test2
a+c+e+g
+++++??

(3)length()
[zkpk@master as]$ awk 'BEGIN{str="I LOVE YOU" ; print length(str)}' 
10
[zkpk@master as]$ awk '{print $0,length()}' test
AAAAA 5
AxyzA 5
#當(dāng)length()沒有指定參數(shù)時(shí),默認(rèn)$0為函數(shù)參數(shù)

(4)index()
[zkpk@master as]$ awk 'BEGIN{print index("abcdefg" , "f")}'
6
#返回 f 在 abcdefg 字符串中第一次出現(xiàn)的位置

[zkpk@master as]$ cat test3
yaaaaa
ayaaaa
aayaya
aaayaa
[zkpk@master as]$ awk '{print $1 , index($1,"y")}' test3
yaaaaa 1
ayaaaa 2
aayaya 3
aaayaa 4
#第3行就有兩個(gè)y棉姐,但是index函數(shù)只返回第一次匹配到的位置

(5)split
[zkpk@master as]$ awk -v str="what:is:your:name" 'BEGIN{print split(str,arr,":")}'
4
#將字符串str根據(jù)":"進(jìn)行分割后放在arr中,命令結(jié)束返回?cái)?shù)組arr長度,長度為4

[zkpk@master as]$ awk -v str="what:is:your:name" 'BEGIN{len = split(str,arr,":");\
> for(i=1;i<=len;i++){print i , arr[i]}} '
1 what
2 is
3 your
4 name
#分割,遍歷數(shù)組
  1. 時(shí)間函數(shù)

1.systime():得到時(shí)間戳,返回從1970年1月1日開始到當(dāng)前時(shí)間(不計(jì)閏年)的整秒數(shù)

[zkpk@master as]$ echo | awk '{s1=systime()} {print s1}' 
1533567915
[zkpk@master as]$ date +%s
1533567916

  1. 數(shù)組排序函數(shù)

1.asort():對數(shù)組元素進(jìn)行排序,返回值為新數(shù)組長度
2.asorti():對數(shù)組元素下標(biāo)進(jìn)行排序,返回值為新數(shù)組長度

(1)asort()
[zkpk@master as]$ awk 'BEGIN{arr["a"]=100;arr["b"]=99;arr["c"]=66;for(i in arr){print i,arr[i]}}'
a 100
b 99
c 66
[zkpk@master as]$ awk 'BEGIN{arr["a"]=100;arr["b"]=99;arr["c"]=66;asort(arr);\
> for(i in arr){print i,arr[i]}}'
1 66
2 99
3 100
#使用asort函數(shù)進(jìn)行排序后,再次輸出的數(shù)組,已經(jīng)按照值的大小進(jìn)行了排序,但是數(shù)組下標(biāo)也被重置成了純數(shù)字

[zkpk@master as]$ awk 'BEGIN{arr["a"]=100;arr["b"]=99;arr["c"]=66;asort(arr,new);\
for(i in arr){print i,arr[i]}}'
a 100
b 99
c 66
[zkpk@master as]$ awk 'BEGIN{arr["a"]=100;arr["b"]=99;arr["c"]=66;asort(arr,new);\
for(i in new){print i,new[i]}}'
1 66
2 99
3 100
#排序后的數(shù)組放在了new里,arr數(shù)組不變,如果寫上 len=asort(arr,new) 屠列,那么len則是asort函數(shù)返回的數(shù)組的長度

(2)asorti()
[zkpk@master as]$ awk 'BEGIN{arr["z"]=88 ; arr["o"]=99 ; arr["a"]=100 ; \
> for ( i in arr ){ print i , arr[i] }}'
z 88
a 100
o 99
[zkpk@master as]$ awk 'BEGIN{arr["z"]=88 ; arr["o"]=99 ; arr["a"]=100 ; \
> len = asorti(arr,new) ; for ( i in arr ){ print i , arr[i] }}'
z 88
a 100
o 99
[zkpk@master as]$ awk 'BEGIN{arr["z"]=88 ; arr["o"]=99 ; arr["a"]=100 ; \
> len = asorti(arr,new) ; for ( i in new ){ print i , new[i] }}'
1 a
2 o
3 z
#asorti()會根據(jù)原數(shù)組中的下標(biāo)的字母順序進(jìn)行排序,并且將排序后的下標(biāo)
#放在一個(gè)新的數(shù)組中,并且asorti函數(shù)會返回新數(shù)組的長度
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市伞矩,隨后出現(xiàn)的幾起案子笛洛,更是在濱河造成了極大的恐慌,老刑警劉巖乃坤,帶你破解...
    沈念sama閱讀 222,946評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件苛让,死亡現(xiàn)場離奇詭異沟蔑,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)狱杰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評論 3 399
  • 文/潘曉璐 我一進(jìn)店門瘦材,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人仿畸,你說我怎么就攤上這事食棕。” “怎么了错沽?”我有些...
    開封第一講書人閱讀 169,716評論 0 364
  • 文/不壞的土叔 我叫張陵簿晓,是天一觀的道長。 經(jīng)常有香客問我千埃,道長抢蚀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,222評論 1 300
  • 正文 為了忘掉前任镰禾,我火速辦了婚禮皿曲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吴侦。我一直安慰自己屋休,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,223評論 6 398
  • 文/花漫 我一把揭開白布备韧。 她就那樣靜靜地躺著劫樟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪织堂。 梳的紋絲不亂的頭發(fā)上叠艳,一...
    開封第一講書人閱讀 52,807評論 1 314
  • 那天,我揣著相機(jī)與錄音易阳,去河邊找鬼附较。 笑死,一個(gè)胖子當(dāng)著我的面吹牛潦俺,可吹牛的內(nèi)容都是我干的拒课。 我是一名探鬼主播,決...
    沈念sama閱讀 41,235評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼事示,長吁一口氣:“原來是場噩夢啊……” “哼早像!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起肖爵,我...
    開封第一講書人閱讀 40,189評論 0 277
  • 序言:老撾萬榮一對情侶失蹤卢鹦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后劝堪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體冀自,經(jīng)...
    沈念sama閱讀 46,712評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谁榜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,775評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了凡纳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,926評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡帝蒿,死狀恐怖荐糜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情葛超,我是刑警寧澤暴氏,帶...
    沈念sama閱讀 36,580評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站绣张,受9級特大地震影響答渔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜侥涵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,259評論 3 336
  • 文/蒙蒙 一沼撕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧芜飘,春花似錦务豺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至娶牌,卻和暖如春奔浅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背诗良。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評論 1 274
  • 我被黑心中介騙來泰國打工汹桦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鉴裹。 一個(gè)月前我還...
    沈念sama閱讀 49,368評論 3 379
  • 正文 我出身青樓营勤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親壹罚。 傳聞我的和親對象是個(gè)殘疾皇子葛作,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,930評論 2 361

推薦閱讀更多精彩內(nèi)容

  • php usleep() 函數(shù)延遲代碼執(zhí)行若干微秒。 unpack() 函數(shù)從二進(jìn)制字符串對數(shù)據(jù)進(jìn)行解包猖凛。 uni...
    思夢PHP閱讀 1,987評論 1 24
  • 總結(jié)了一些開發(fā)中常用的函數(shù): usleep() //函數(shù)延遲代碼執(zhí)行若干微秒赂蠢。 unpack() //函數(shù)從二進(jìn)制...
    ADL2022閱讀 458評論 0 3
  • PHP常用函數(shù)大全 usleep() 函數(shù)延遲代碼執(zhí)行若干微秒。 unpack() 函數(shù)從二進(jìn)制字符串對數(shù)據(jù)進(jìn)行解...
    上街買菜丶迷倒老太閱讀 1,373評論 0 20
  • awk介紹awk變量printf命令:實(shí)現(xiàn)格式化輸出操作符awk patternawk actionawk數(shù)組aw...
    哈嘍別樣閱讀 1,571評論 0 4
  • 從三個(gè)方面辨析近義詞: 1辨泳,意義 2虱岂,色彩 3玖院,功能 意義 詞意的輕重 著重點(diǎn) 詞意的范圍 詞語的作...
    Ban_s閱讀 673評論 0 0