Linux:awk命令_第1頁
Linux:awk命令_第2頁
Linux:awk命令_第3頁
Linux:awk命令_第4頁
Linux:awk命令_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、Linux:awk命令詳解簡單使用:awk :對于文件中一行行的獨處來執(zhí)行操作 。awk -F :'print $1,$4'   使用:來分割這一行,把這一行的第一第四個域打印出來 。AWK命令介紹awk語言的最基本功能是在文件或字符串中基于指定規(guī)則瀏覽和抽取信息,awk抽取信息后,才能進(jìn)行其他文本操作,完整的awk腳本通常用來格式化文本文件中的信息 1. 調(diào)用awk第一種命令行方式,如1awk -Field-separator 'commands' input-file(s)這里commands是真正的awk命令,-F域分隔符是可

2、選的,awk默認(rèn)使用空格分隔,因此如果要瀏覽域間有空格的文本,不必指定這個選項,但如果瀏覽如passwd文件,此文件各域使用冒號作為分隔符,則必須使用-F選項   awk -F 'commands' input-file第二種,將所有awk命令插入一個文件,并使awk程序可執(zhí)行,然后用awk命令解釋器作為腳本的首行,以便通過鍵入腳本名稱來調(diào)用它第三種,將所有awk命令插入一個單獨文件,然后調(diào)用,如1awk -f awk-script-file input-file-f選項指明在文件awk-script-file的awk腳本,input-file是使用awk進(jìn)

3、行瀏覽的文件名2. awk腳本awk腳本由各種操作和模式組成,根據(jù)分隔符(-F選項),默認(rèn)為空格,讀取的內(nèi)容依次放置到對應(yīng)的域中,一行一行記錄讀取,直到文件尾2.1.  模式和動作任何awk語句都是由模式和動作組成,在一個awk腳本中可能有許多語句。模式部分決定動作語句何時觸發(fā)及觸發(fā)事件。動作即對數(shù)據(jù)進(jìn)行的操作,如果省去模式部分,動作將時刻保持執(zhí)行狀態(tài)模式可以是任何條件語句或復(fù)合語句或正則表達(dá)式,模式包含兩個特殊字段BEGIN和END,使用BEGIN語句設(shè)置計數(shù)和打印頭,BEGIN語句使用在任何文本瀏覽動作之前,之后文本瀏覽動作依據(jù)輸入文件開始執(zhí)行;END語句用來在awk完成文本瀏覽

4、動作后打印輸出文本總數(shù)和結(jié)尾狀態(tài)標(biāo)志,有動作必須使用括起來實際動作在大括號內(nèi)指明,常用來做打印動作,但是還有更長的代碼如if和循環(huán)looping語句及循環(huán)退出等,如果不指明采取什么動作,awk默認(rèn)打印出所有瀏覽出的記錄2.2. 域和記錄awk執(zhí)行時,其瀏覽標(biāo)記為$1,$2.$n,這種方法稱為域標(biāo)記。使用$1,$3表示參照第1和第3域,注意這里使用逗號分隔域,使用$0表示使用所有域。例如1awk 'print $0' temp.txt sav.txt表示打印所有域并把結(jié)果重定向到sav.txt中1awk 'print $0' temp.txttee sav.txt

5、和上例相似,不同的是將在屏幕上顯示出來1awk 'print $1,$4' temp.txt只打印出第1和第4域1awk 'BEGIN print NAME  GRADEn- print $1t$4' temp.txt表示打信息頭,即輸入的內(nèi)容的第一行前加上NAME  GRADEn-,同時內(nèi)容以tab分開1awk 'BEGIN print being print $1 END print end' temp同時打印信息頭和信息尾2.3. 條件操作符、=、=、!=、=、匹配正則表達(dá)式、!不匹配正則表達(dá)式匹配awk &#

6、39;if ($4ASIMA) print $0' temp 表示如果第四個域包含ASIMA,就打印整條精確匹配awk '$3=48 print $0' temp    只打印第3域等于48的記錄不匹配  awk '$0 ! ASIMA' temp      打印整條不包含ASIMA的記錄不等于  awk '$1 != asima' temp小于    awk 'if ($

7、1$2) print $1 is smaller' temp設(shè)置大小寫 awk 'Ggreen' temp      打印整條包含Green,或者green的記錄任意字符 awk '$1 .a' temp    打印第1域中第四個字符是a的記錄,符號代表行首,符合.代表任意字符或關(guān)系匹配 awk '$0(abc)(efg)' temp   使用時,語句需要括起來AND與關(guān)系  awk 'if

8、( $1=a && $2=b ) print $0' tempOR或關(guān)系   awk 'if ($1=a $1=b) print $0' temp2.4. awk內(nèi)置變量ARGC命令行參數(shù)個數(shù)NF 瀏覽記錄的域個數(shù)AGRV命令行參數(shù)排列NR已讀的記錄數(shù)ENVIRON支持隊列中系統(tǒng)環(huán)境變量的使用 OFS輸出域分隔符  FILENAMEawk瀏覽的文件名 ORS輸出記錄分隔符FNR瀏覽文件的記錄數(shù)RS控制記錄分隔符FS設(shè)置輸入域分隔符,同- F選項NF 瀏覽記錄的域個數(shù) 1234

9、5例      awk 'END print NR' temp    在最后打印已讀記錄條數(shù)       awk 'print NF,NR,$0 END print FILENAME' temp       awk 'if (NR0 && $4Brown) print $0' temp  至少存

10、在一條記錄且包含Brown      NF的另一用法  echo $PWD awk -F 'print $NF'   顯示當(dāng)前目錄名 2.5. awk操作符在awk中使用操作符,基本表達(dá)式可以劃分成數(shù)字型、字符串型、變量型、域及數(shù)組元素設(shè)置輸入域到變量名1awk 'name=$1;six=$3; if (six=man) print name is six' temp域值比較操作1awk 'BEGIN BASE=27 if ($4BASE) pr

11、int $0' temp修改數(shù)值域取值(原輸入文件不會被改變)1awk 'if ($1=asima) $6=$6-1;print $1,$6,$7' temp修改文本域1awk 'if ($1=asima) ($1=desc);print $1' temp只顯示修改記錄(只顯示所需要的,區(qū)別上一條命令,注意)1awk 'if ($1=asima) $1=desc;print$1' temp創(chuàng)建新的輸出域1awk '$4=$3-$2; print $4' temp統(tǒng)計列值12awk '(tot+=$3);END pr

12、int tot' temp           會顯示每列的內(nèi)容  awk '(tot+=$3);END print tot' temp         只顯示最后的結(jié)果文件長度相加1ls -lawk 'd print $9t$5 tot+=$5 ENDprint totKB tot'只列出文件名1ls -lawk 'print $9'

13、60;    常規(guī)情況文件名是第9域2.6. awk內(nèi)置字符串函數(shù)1234567891011121314151617181920212223242526272829gsub(r,s)              在整個$0中用s替代r    awk 'gsub(name,xingming) print $0' temp    gsub

14、(r,s,t)           在整個t中用s替代r    index(s,t)             返回s中字符串t的第一位置    awk 'BEGIN print index(Sunny,ny)' temp     返回4

15、0;   length(s)               返回s的長度    match(s,r)             測試s是否包含匹配r的字符串    awk '$1=J.Lulu print match($1,u

16、)' temp    返回4    split(s,a,fs)         在fs上將s分成序列a     awk 'BEGIN print split(12#345#6789,myarray,#)' 返回3,同時myarray1=12, myarray2=345, myarray3=6789    sprint(fmt,exp)

17、        返回經(jīng)fmt格式化后的exp    sub(r,s)   從$0中最左邊最長的子串中用s代替r(只更換第一遇到的匹配字符串)    substr(s,p)         返回字符串s中從p開始的后綴部分    substr(s,p,n)    

18、;   返回字符串s中從p開始長度為n的后綴部分2.7.  printf函數(shù)的使用12345字符轉(zhuǎn)換 echo 65 awk 'printf %cn,$0'    輸出A    awk 'BEGIN printf %fn,999'        輸出999.000000    格式化輸出awk 'printf %-15s %sn

19、,$1,$3' temp 將第一個域全部左對齊顯示2.8. 其他awk用法向一行awk命令傳值12awk 'if ($5AGE) print $0' AGE=10 temp  who awk 'if ($1=user) print $1 are in $2 ' user=$LOGNAME 使用環(huán)境變量awk腳本命令12345678910111213141516171819202122!binawk -f   # all comment lines must start with a hash '#'

20、  # name student_tot.awk  # to call student_tot.awk grade.txt  # prints total and average of club student points  # print a header first  BEGIN        print Student    Date   Member No. 

21、; Grade  Age  Points  Max     print Name  Joined Gained  Point Available     print=       # let's add the scores of points gained  (tot+=$6);   &#

22、160;# finished processing now let's print the total and average point  END        print Club student total points tot      print Average Club Student points totN  2.9. awk數(shù)組awk的循環(huán)基本結(jié)構(gòu)1234567For (element in

23、array) print arrayelement     awk 'BEGIN         record=123#456#789;split(record,myarray,#)       END          for (i in myarray) print myarrayi   3.0 

24、 awk中自定義語句3.1. 條件判斷語句(if)12345if(表達(dá)式) #  if ( Variable in Array )      語句1  else      語句2格式中語句1可以是多個語句,如果你為了方便Unix awk判斷也方便你自已閱讀,你最好將多個語句用括起來。Unix awk分枝結(jié)構(gòu)允許嵌套,其格式為:123456if(表達(dá)式)     語句1  els

25、e if(表達(dá)式)     語句2  else     語句3 12345678910111213141516awk 'BEGIN   test=100;  if(test90)          print very good;      else if(test60) 

26、;         print good;      else         print no pass;     '    very good每條命令語句后面可以用“;”號結(jié)尾。3.2. 循環(huán)語句(while,for,do)1.while語句格式:while(表達(dá)式)語句例子:

27、1234567891011chengmolocalhost nginx# awk 'BEGIN  test=100;  total=0;  while(i=test)    total+=i;  i+;    print total;  '  50502.for 循環(huán)for循環(huán)有兩種格式:格式1:for(變量 in 數(shù)組)語句 例子:1234567891011121314

28、15chengmolocalhost nginx# awk 'BEGIN  for(k in ENVIRON)    print k=ENVIRONk;    '    AWKPATH=.usrshareawk  OLDPWD=homeweb97  SSH_ASKPASS=usrlibexecopensshgnome-ssh-askpass  SELINUX_LEVEL_REQUESTED=  SELINUX_ROLE_REQ

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論