




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
awk編程的使用本章目標(biāo)1.awk編程的作用2.awk的模式3.awk的動作4.awk的運算符5.awk的內(nèi)建函數(shù)6.awk的內(nèi)建變量7.awk與正則的配合使用awk編程語言的特點1.使用直譯器(Interpreter)不需先行編譯2.變量無類型之分(Typeless)3.可使用文字當(dāng)數(shù)組的下標(biāo)(AssociativeArray)4.awk撰寫程序比起使用其它語言更簡潔便利且節(jié)省時間5.awk還具有一些內(nèi)建變量和函數(shù)6.awk擅于處理具數(shù)據(jù)行(Record),字段(Field)型態(tài)的資料7.awk內(nèi)建有pipe的功能,可以傳送到shell進(jìn)行加工處理8.awk的數(shù)據(jù)行數(shù)據(jù)行:awk從數(shù)據(jù)文件上讀取數(shù)據(jù)的基本單位.以上列文件emp.dat為例,awk讀入的第一筆數(shù)據(jù)行是"A125Jenny100210"第二筆數(shù)據(jù)行是"A341Dan110215"一般而言,一個數(shù)據(jù)行就相當(dāng)于數(shù)據(jù)文件上的一行資料awk的數(shù)據(jù)列字段(Field):為數(shù)據(jù)行上被分隔開的子字符串.以數(shù)據(jù)行"A125Jenny100210"為例,第一欄第二欄第三欄第四欄"A125""Jenny"100210一般是以空格符來分隔相鄰的字段.awk程序的主要結(jié)構(gòu)awk程序的主要結(jié)構(gòu):
awk程序中主要語法是Pattern{Actions},故常見之a(chǎn)wk程序其型態(tài)如下:Pattern1{Actions1}Pattern2{Actions2}......Pattern3{Actions3}pattern是什么?awk可接受許多不同型態(tài)的Pattern.一般常使用"關(guān)系表達(dá)式"(Relationalexpression)來當(dāng)成Pattern.例如:x>34是一個Pattern,判斷變量x與34是否存在大于的關(guān)系.x==y是一個Pattern,判斷變量x與變量y是否存在等于的關(guān)系.上式中
x>34,x==y便是典型的Pattern.awk提供C語言中常見的關(guān)系運算符(RelationalOperators)如>,<,>=,<=,==,!=此外,awk還提供
~(match)及
!~(notmatch)二個關(guān)系運算符action是什么?Actions是由許多awk指令構(gòu)成.而awk的指令與C語言中的指令十分類似.例如
:awk的I/O指令:print,printf(),getline...awk的流程控制指令:if(...){..}else{..},while(...){...}...awk如何處理Pattern{Actions}?awk會先判斷(Evaluate)該Pattern的值,若Pattern判斷后的值為true(或不為0的數(shù)字,或不是空的字符串),則awk將執(zhí)行該Pattern所對應(yīng)的Actions.反之,若Pattern之值不為true,則awk將不執(zhí)行該Pattern所對應(yīng)的Actions.特殊的patten之BEGINBEGIN為awk的保留字,是一種特殊的Pattern.BEGIN成立(其值為true)的時機是:"awk程序一開始執(zhí)行,尚未讀取任何數(shù)據(jù)之前."所以在BEGIN{Actions}語法中,其Actions部份僅于程序一開始執(zhí)行時被執(zhí)行一次.當(dāng)awk從數(shù)據(jù)文件讀入數(shù)據(jù)行后,BEGIN便不再成立,故不論有多少數(shù)據(jù)行,該Actions部份僅被執(zhí)行一次特殊的patten之ENDEND為awk的保留字,是另一種特殊的Pattern.END成立(其值為true)的時機與BEGIN恰好相反,為:"awk處理完所有數(shù)據(jù),即將離開程序時"平常讀入數(shù)據(jù)行時,END并不成立,故其對應(yīng)的Actions并不被執(zhí)行;唯有當(dāng)awk讀完所有數(shù)據(jù)時,該Actions才會被執(zhí)行注意:不管數(shù)據(jù)行有多少筆,該Actions僅被執(zhí)行一次awk的運算符awk中的數(shù)學(xué)運算符
+(加),-(減),*(乘),/(除),%(求余數(shù)),^(指數(shù))awk中的賦值運算符
=,+=,-=,*=,/=,%=,^=awk中的邏輯運算符
&&(and),||(or),!(not)awk中的關(guān)系運算符
>,>=,<,<=,==,!=,~,!~awk中其它的運算符
+(正號),-(負(fù)號),
++(遞增),--(遞減)awk的指令關(guān)鍵字print表達(dá)式列表printf(格式化字符串,表達(dá)式列表)if(表達(dá)式)語句[else語句]while(表達(dá)式)語句do語句while(表達(dá)式)for(表達(dá)式;表達(dá)式;表達(dá)式)語句for(variableinarray)語句deletebreakcontinueexit[表達(dá)式]awk中for語句的特殊用法語法:for(variablein
array)statement范例:執(zhí)行下列命令awk'BEGIN{X[1]=50;X[2]=60;X["last"]=70for(anyinX)printf("X[%s]=%d\n",any,X[any])}'結(jié)果輸出:X[last]=70X[1]=50X[2]=60awk到shell的輸出和輸入指令1.printf指令2.print指令3.getline4.close5.system6."|"pipe指令awk中printf使用printf("format",item1,item2,..)范例:id="BE-2647";
ave=89printf("ID#:%s
AveScore:%d\n",id,ave)(a)結(jié)果印出:ID#:BE-2647
AveScore:89awk中print的使用范例:id="BE-267";
ave=89print"ID#:",id,"AveScore:"ave(a)結(jié)果印出:ID#:BE-267AveScore:89awk中g(shù)etline的使用語法getline一次讀取一行資料,若讀取成功則return1,若讀取失敗則return-1,若遇到文件結(jié)束(EOF),則return0awk中close的使用范例:BEGIN{
print"ID#
Salary">"data.rpt"}
{
print$1,$2*$3
|"sort-k1>data.rpt"}
END{
close("data.rpt")
close("sort-k1>data.rpt")
print"Thereare",NR,"recordsprocessed."}awk中system的使用該指令用以執(zhí)行Shell上的command.范例:DataFile="invent.rpt"system("rm"DataFile)
說明:(a)system("字符串")指令接受一個字符串當(dāng)成Shell的命令.上例中,使用一個字串常數(shù)"rm"連接(concate)一個變量DataFile形成要求Shell執(zhí)行的命令.Shell實際執(zhí)行的命令為"rminvent.rpt"awk中pipe的使用"|"配合awk輸出指令,可把output到stdout的資料繼續(xù)轉(zhuǎn)送給Shell上的某一命令當(dāng)成input的資料."|"
配合awkgetline指令,可呼叫Shell執(zhí)行某一命令,再以awk的getline指令將該命令的所產(chǎn)生的資料讀進(jìn)awk程序中.范例:{print$1,$2*$3
|"sort-k1>result"}
"date"|
getline
Date_dataawk的內(nèi)建函數(shù)index(原字串,找尋的子字串)
length(字串)
match(原字串,用以找尋比對的正則表達(dá)式)
split(原字串,數(shù)組名稱,分隔字符)
sprintf(格式字符串,項1,項2,...)
sub(比對用的正則表達(dá)式,將替換的新字串,原字串)
gsub(比對用的正則表達(dá)式,將替換的新字串,原字串)
substr(字串,起始位置[,長度])
awk的數(shù)學(xué)函數(shù)int(x):返回x的整數(shù)部分
sqrt(x):返回x的平方根
exp(x):將返回e的x次方
log(x):將返回x以e為底的對數(shù)值
sin(x):x須以弧度為單位,sin(x)將返回x的sin函數(shù)值.cos(x):x須以弧度為單位,cos(x)將返回x的cos函數(shù)值rand():返回介于0與1之間的隨機數(shù)值;0<rand()<1
srand([x]):指定以x為rand()函數(shù)起始的種子
awk的內(nèi)建變量ARGC
記錄除了-F,-v,-f之外的所有參數(shù)的個數(shù)ARGV數(shù)組用以記錄命令列上的參數(shù)FILENAME當(dāng)前文件名FS字段分隔符RS行分隔符NF字段數(shù)NR當(dāng)前文件行數(shù)FNR已讀入行數(shù)$0awk所讀入的數(shù)據(jù)行$1,$2..讀入數(shù)據(jù)的字段數(shù)OFS輸出字段分隔符ORS輸出行分隔符RSTART與函數(shù)match()有關(guān)的函數(shù)RLENGTH與函數(shù)match()有關(guān)的函數(shù)sub與gsub搭配使用awk'BEGIN{data="p12-P34P56-p61"while(match(data,/[0-9]+/)>0){printsubstr(data,RSTART,RLENGTH)sub(/[0-9]+/,"",data)}}'結(jié)果輸出:12345661awk中數(shù)組的使用awk程序中允許使用字符串當(dāng)做數(shù)組的下標(biāo)(index).利用這個特色十分有助于資料統(tǒng)計工作.(使用字符串當(dāng)下標(biāo)的數(shù)組稱為AssociativeArray)awk中數(shù)組的特性
使用字符串當(dāng)數(shù)組的下標(biāo)(index).使用數(shù)組前不須宣告數(shù)組名及其大小awk數(shù)組舉例首先建立一個數(shù)據(jù)文件,并取名為reg.dat.此為一學(xué)生注冊的資料文件;第一欄為學(xué)生姓名,其后為該生所修課程
catreg.datMaryO.S.Arch.DiscreteSteveD.S.AlgorithmArch.WangDiscreteGraphicsO.S.LisaGraphicsA.I.LilyDiscreteAlgorithm需求的實現(xiàn)[范例:]統(tǒng)計各科修課人數(shù),并印出結(jié)果.建立如下程序,并取名為course.awk:{for(i=2;i<=NF;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 養(yǎng)發(fā)養(yǎng)護(hù)知識培訓(xùn)課件
- 9 心中的110-有點警惕性(第1課時)(教學(xué)設(shè)計)2023-2024學(xué)年統(tǒng)編版道德與法治三年級上冊
- 遼寧省大連市高中化學(xué) 第五章 進(jìn)入合成有機高分子化合物的時代 5.1 合成高分子化合物的基本方法教學(xué)實錄 新人教版選修5
- 搶救車采用封條管理制度
- 課時1 認(rèn)識11~19(教學(xué)設(shè)計)-2024-2025學(xué)年一年級上冊數(shù)學(xué)蘇教版
- 房屋租賃合同解約協(xié)議
- 企業(yè)內(nèi)部環(huán)境保護(hù)管理制度
- 中小企業(yè)網(wǎng)絡(luò)解決方案-技術(shù)建議書模板
- 塔吊司機勞務(wù)合同
- 中國貨幣發(fā)行制度探討
- 2025屆四川省成都市高三下學(xué)期二診物理試題含答案
- 2025年天翼云筆試試題及答案
- 2025年山東省中小學(xué)生海洋知識競賽參考試指導(dǎo)題庫500題(含答案)
- 2025年高考語文備考之DeepSeek與《哪吒2》相關(guān)語言文字運用題訓(xùn)練
- 2024年廣東省公務(wù)員《申論(行政執(zhí)法)》試題真題及答案
- 山東2025年山東師范大學(xué)招聘153人筆試歷年參考題庫附帶答案詳解
- 2025湖北省建筑安全員《C證》考試題庫及答案
- 2025年西安印鈔有限公司招聘筆試參考題庫含答案解析
- 《全國森林經(jīng)營規(guī)劃(2016-2050年)》
- 起重司索工安全操作規(guī)程范文(2篇)
- 高質(zhì)量金融人才職業(yè)發(fā)展報告 2024
評論
0/150
提交評論