linux三劍客---awk

1、介紹

? ? ? ? awk是一種編程語(yǔ)言惧磺,用于在linux/unix下對(duì)文本和數(shù)據(jù)進(jìn)行處理颖对。數(shù)據(jù)可以來自標(biāo)準(zhǔn)輸入(stdin)、一個(gè)或多個(gè)文件磨隘,或其它命令的輸出缤底。它支持用戶自定義函數(shù)和動(dòng)態(tài)正則表達(dá)式等先進(jìn)功能,是linux/unix下的一個(gè)強(qiáng)大編程工具番捂。它在命令行中使用个唧,但更多是作為腳本來使用。awk有很多內(nèi)建的功能设预,比如數(shù)組徙歼、函數(shù)等,這是它和C語(yǔ)言的相同之處鳖枕,靈活性是awk最大的優(yōu)勢(shì)

2魄梯、語(yǔ)法

awk [options] 'script' var=value?file(s)

awk [options] -f scriptfile var=value file(s)

-F?fs ??fs指定輸入分隔符,fs可以是字符串或正則表達(dá)式宾符,如-F:

-v?var=value ??賦值一個(gè)用戶定義變量酿秸,將外部變量傳遞給awk

-f?scripfile ?從腳本文件中讀取awk命令

-m[fr]?val ??對(duì)val值設(shè)置內(nèi)在限制,-mf選項(xiàng)限制分配給val的最大塊數(shù)目魏烫;-mr選項(xiàng)限制記錄的最大數(shù)目

2辣苏、awk工作原理

awk 'BEGIN{ commands } pattern{ commands } END{ commands }'

第一步:執(zhí)行BEGIN{ commands }語(yǔ)句塊中的語(yǔ)句;

第二步:從文件或標(biāo)準(zhǔn)輸入(stdin)讀取一行哄褒,然后執(zhí)行pattern{ commands }語(yǔ)句塊稀蟋,它逐行掃描文件,從第一行到最后一行重復(fù)這個(gè)過程读处,直到文件全部被讀取完畢糊治。

第三步:當(dāng)讀至輸入流末尾時(shí),執(zhí)行END{ commands }語(yǔ)句塊罚舱。

3井辜、使用

echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1"="var2"="var3; }'

v1=v2=v3

cat a.js

1

2

3

awk 'BEGIN{print "start"} {a+=$1} END{print a}' b.js

start

6

4、內(nèi)置變量

說明:[A][N][P][G]表示第一個(gè)支持變量的工具管闷,[A]=awk粥脚、[N]=nawk、[P]=POSIXawk包个、[G]=gawk

$n 當(dāng)前記錄的第n個(gè)字段刷允,比如n為1表示第一個(gè)字段冤留,n為2表示第二個(gè)字段。

$0 這個(gè)變量包含執(zhí)行過程中當(dāng)前行的文本內(nèi)容树灶。

[N] ARGC 命令行參數(shù)的數(shù)目纤怒。

[G] ARGIND 命令行中當(dāng)前文件的位置(從0開始算)。

[N] ARGV 包含命令行參數(shù)的數(shù)組天通。

[G] CONVFMT 數(shù)字轉(zhuǎn)換格式(默認(rèn)值為%.6g)泊窘。

[P] ENVIRON 環(huán)境變量關(guān)聯(lián)數(shù)組。

[N] ERRNO 最后一個(gè)系統(tǒng)錯(cuò)誤的描述像寒。

[G] FIELDWIDTHS 字段寬度列表(用空格鍵分隔)烘豹。

[A] FILENAME 當(dāng)前輸入文件的名。

[P] FNR 同NR诺祸,但相對(duì)于當(dāng)前文件携悯。

[A] FS 字段分隔符(默認(rèn)是任何空格)。

[G] IGNORECASE 如果為真筷笨,則進(jìn)行忽略大小寫的匹配憔鬼。

[A] NF 表示字段數(shù),在執(zhí)行過程中對(duì)應(yīng)于當(dāng)前的字段數(shù)胃夏。

[A] NR 表示記錄數(shù)逊彭,在執(zhí)行過程中對(duì)應(yīng)于當(dāng)前的行號(hào)。

[A] OFMT 數(shù)字的輸出格式(默認(rèn)值是%.6g)构订。

[A] OFS 輸出字段分隔符(默認(rèn)值是一個(gè)空格)。

[A] ORS 輸出記錄分隔符(默認(rèn)值是一個(gè)換行符)避矢。

[A] RS 記錄分隔符(默認(rèn)是一個(gè)換行符)悼瘾。

[N] RSTART 由match函數(shù)所匹配的字符串的第一個(gè)位置。

[N] RLENGTH 由match函數(shù)所匹配的字符串的長(zhǎng)度审胸。

[N] SUBSEP 數(shù)組下標(biāo)分隔符(默認(rèn)值是34)亥宿。

1)每行的最后一個(gè)值

echo -e "line1 f2 f3\n line2 f4 f5" | awk '{print $NF}'

f3

f5

echo -e "line1 f2 f3\n line2 f4 f5" | awk '{print $(NF-1)}'

f2

f4

2)每行的列數(shù)

echo -e "line1 f2 f3\n line2 f4 f5" | awk '{print NF}'

3

3

3)傳遞參數(shù)

VAR=10000

echo | awk -v VARIABLE=$VAR '{ print VARIABLE }'

5、運(yùn)算和判斷


運(yùn)算符

awk 'BEGIN{a="b";print a++,++a;}'

0 2

awk 'BEGIN{a="b";arr[0]="b";arr["b"]="c";print (a in arr);}'

1

注意:所有用作算術(shù)運(yùn)算符進(jìn)行操作砂沛,操作數(shù)自動(dòng)轉(zhuǎn)為數(shù)值烫扼,所有非數(shù)值都變?yōu)?

awk 'BEGIN{

????test=100;

????if(test>90){

????????print "very good";

????} else if(test>60){

????????print "good";

????} else{

????????print "no pass";

????}

}'

very good

awk 'BEGIN{

for(k in ENVIRON){

print k"="ENVIRON[k];

}

}'

TERM=linuxG_BROKEN_FILENAMES=1SHLVL=1

pwd=/root/text...

logname=root

HOME=/root

SSH_CLIENT=192.168.1.21 53087 22

6、高級(jí)輸入

cat a.js

a

b

c

d

e

awk 'NR%2==1{next}{print NR,$0;}' a.js

2 b

4 d

cat a.js:

web01[192.168.2.100]

httpd ok

tomcat ok

sendmail ok

web02[192.168.2.101]

httpd ok

postfix ok

web03[192.168.2.102]

mysqld ok

httpd ok

awk '/^web/{T=$0;next;}{print T":\t"$0;}' a.js

web01[192.168.2.100]: httpd okweb01[192.168.2.100]: tomcat okweb01[192.168.2.100]: sendmail okweb02[192.168.2.101]: httpd okweb02[192.168.2.101]: postfix okweb03[192.168.2.102]: mysqld okweb03[192.168.2.102]: httpd ok

執(zhí)行shell的date命令碍庵,并通過管道輸出給getline映企,然后getline從管道中讀取并將輸入賦值給out,split函數(shù)把變量out轉(zhuǎn)化成數(shù)組mon静浴,然后打印數(shù)組mon的第二個(gè)元素

awk 'BEGIN{ "date" | getline out; split(out,mon); print mon[1] }' test

2018年

awk 'BEGIN{info="it is a test";split(info,tA," ");for(k in tA){print k,tA[k];}}'

2 is

3 a

4 test

1 it

awk 'BEGIN{OFMT="%.3f";fs=sin(1);fe=exp(10);fl=log(10);fi=int(3.1415);print fs,fe,fl,fi;}'0.841 22026.466 2.303 3


支持的函數(shù)


字符串函數(shù)


時(shí)間函數(shù)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末堰氓,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子苹享,更是在濱河造成了極大的恐慌双絮,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異囤攀,居然都是意外死亡软免,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門焚挠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來膏萧,“玉大人,你說我怎么就攤上這事宣蔚∠蚯溃” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵胚委,是天一觀的道長(zhǎng)挟鸠。 經(jīng)常有香客問我,道長(zhǎng)亩冬,這世上最難降的妖魔是什么艘希? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮硅急,結(jié)果婚禮上覆享,老公的妹妹穿的比我還像新娘。我一直安慰自己营袜,他們只是感情好撒顿,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著荚板,像睡著了一般凤壁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上跪另,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天拧抖,我揣著相機(jī)與錄音,去河邊找鬼免绿。 笑死唧席,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嘲驾。 我是一名探鬼主播淌哟,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼距淫!你這毒婦竟也來了绞绒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤榕暇,失蹤者是張志新(化名)和其女友劉穎蓬衡,沒想到半個(gè)月后喻杈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡狰晚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年筒饰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片壁晒。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瓷们,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出秒咐,到底是詐尸還是另有隱情谬晕,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布携取,位于F島的核電站攒钳,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏雷滋。R本人自食惡果不足惜不撑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望晤斩。 院中可真熱鬧焕檬,春花似錦、人聲如沸澳泵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)兔辅。三九已至爆侣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間幢妄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工茫负, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蕉鸳,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓忍法,卻偏偏與公主長(zhǎng)得像潮尝,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子饿序,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

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