• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            大龍的博客

            常用鏈接

            統(tǒng)計

            最新評論

            awk命令

            unix的AWK命令介紹收藏收藏

                awk語言的最基本功能是在文件或字符串中基于指定規(guī)則瀏覽和抽取信息,awk抽取信息后,才能進行其他文本操作,完整的awk腳本通常用來格式化文本文件中的信息

            調(diào)用awk:

               第一種,命令行方式,如:awk [-F field-separator] 'commands' input-file(s)

                     這里commands是真正的awk命令,[-F域分隔符]是可選的,awk默認使用空格分隔,因此如果要瀏覽域間有空格的文本,不必指定這個選項,但如果瀏覽如passwd文件,此文件各域使用冒號作為分隔符,則必須使用-F選項:   awk -F : 'commands' input-file

               第二種,將所有awk命令插入一個文件,并使awk程序可執(zhí)行,然后用awk命令解釋器作為腳本的首行,以便通過鍵入腳本名稱來調(diào)用它

               第三種,將所有awk命令插入一個單獨文件,然后調(diào)用: awk -f awk-script-file input-file

                     -f選項指明在文件awk-script-file的awk腳本,input-file是使用awk進行瀏覽的文件名

            awk腳本:

                awk腳本由各種操作和模式組成,根據(jù)分隔符(-F選項),默認為空格,讀取的內(nèi)容依次放置到對應的域中,一行一行記錄讀取,直到文件尾

                模式和動作:任何awk語句都是由模式和動作組成,在一個awk腳本中可能有許多語句。模式部分決定動作語句何時觸發(fā)及觸發(fā)事件。動作即對數(shù)據(jù)進行的操作,如果省去模式部分,動作將時刻保持執(zhí)行狀態(tài)

                模式可以是任何條件語句或復合語句或正則表達式,模式包含兩個特殊字段BEGIN和END,使用BEGIN語句設置計數(shù)和打印頭,BEGIN語句使用在任何文本瀏覽動作之前,之后文本瀏覽動作依據(jù)輸入文件開始執(zhí)行;END語句用來在awk完成文本瀏覽動作后打印輸出文本總數(shù)和結(jié)尾狀態(tài)標志,有動作必須使用{}括起來

                實際動作在大括號{}內(nèi)指明,常用來做打印動作,但是還有更長的代碼如if和循環(huán)looping語句及循環(huán)退出等,如果不指明采取什么動作,awk默認打印出所有瀏覽出的記錄

            域和記錄:

                awk執(zhí)行時,其瀏覽標記為$1,$2...$n,這種方法稱為域標記.使用$1,$3表示參照第1和第3域,注意這里使用逗號分隔域,使用$0表示使用所有域

                例:awk '{print $0}' temp.txt > sav.txt   表示打印所有域并把結(jié)果重定向到sav.txt中

                  awk '{print $0}' temp.txt|tee sav.txt  和上例相似,不同的是將在屏幕上顯示出來

                  awk '{print $1,$4}' temp.txt           只打印出第1和第4域

                  awk 'BEGIN {print "NAME  GRADE\n-------------"} {print $1"\t"$4}' temp.txt 

                    表示打信息頭,即輸入的內(nèi)容的第一行前加上"NAME  GRADE\n-------------",同時內(nèi)容以tab分開

                  awk 'BEGIN {print "being"} {print $1} END {print "end"}' temp 同時打印信息頭和信息尾

            條件操作符:

                <、<=、==、!=、>=、~匹配正則表達式、!~不匹配正則表達式

                匹配:awk '{if ($4~/ASIMA/) print $0}' temp 表示如果第四個域包含ASIMA,就打印整條

                    awk '$0 ~ /ASIMA/' temp 表示只要整條包含ASIMA就打印出來

                精確匹配:awk '$3=="48" {print $0}' temp    只打印第3域等于"48"的記錄

                不匹配:  awk '$0 !~ /ASIMA/' temp      打印整條不包含ASIMA的記錄

                不等于:  awk '$1 != "asima"' temp

                小于:    awk '{if ($1<$2) print $1 "is smaller"}' temp

                設置大小寫: awk '/[Gg]reen/' temp      打印整條包含Green,或者green的記錄

                任意字符: awk '$1 ~/^...a/' temp    打印第1域中第四個字符是a的記錄,^從行首開始,.任意字符     

                或關(guān)系匹配: awk '$0~/(abc)|(efg)/' temp   使用|時,語句需要括起來  

                AND與關(guān)系:  awk '{if ( $1=="a" && $2=="b" ) print $0}' temp

                OR或關(guān)系:   awk '{if ($1=="a" || $1=="b") print $0}' temp

            awk內(nèi)置變量:

                ARGC   命令行參數(shù)個數(shù)    AGRV   命令行參數(shù)排列      ENVIRON   支持隊列中系統(tǒng)環(huán)境變量的使用

                FILENAME   awk瀏覽的文件名   FNR   瀏覽文件的記錄數(shù)   FS   設置輸入域分隔符,同- F選項

                NF   瀏覽記錄的域個數(shù)   NR   已讀的記錄數(shù)    OFS   輸出域分隔符

                ORS  輸出記錄分隔符     RS   控制記錄分隔符

                例:  awk 'END {print NR}' temp    在最后打印已讀記錄條數(shù)

                     awk '{print NF,NR,$0} END {print FILENAME}' temp

                     awk '{if (NR>0 && $4~/Brown/) print $0}' temp  至少存在一條記錄且包含Brown

                NF的另一用法:  echo $PWD | awk -F/ '{print $NF}'   顯示當前目錄名

            awk操作符:

                在awk中使用操作符,基本表達式可以劃分成數(shù)字型、字符串型、變量型、域及數(shù)組元素

                設置輸入域到變量名:

                   awk '{name=$1;six=$3; if (six=="man") print name " is " six}' temp

                域值比較操作:

                   awk 'BEGIN {BASE="27"} {if ($4<BASE) print $0}' temp

                修改數(shù)值域取值:(原輸入文件不會被改變)

                   awk '{if ($1=="asima") $6=$6-1;print $1,$6,$7}' temp

                修改文本域:

                   awk '{if ($1=="asima) ($1=="desc");print $1}' temp

                只顯示修改記錄:(只顯示所需要的,區(qū)別上一條命令,注意{})

                   awk '{if ($1=="asima) {$1=="desc";print$1}}' temp

                創(chuàng)建新的輸出域:

                   awk '{$4=$3-$2; print $4}' temp

                統(tǒng)計列值:

                   awk '(tot+=$3);END {print tot}' temp           會顯示每列的內(nèi)容

                   awk '{(tot+=$3)};END {print tot}' temp         只顯示最后的結(jié)果

                文件長度相加:

                   ls -l|awk '/^[^d]/ {print $9"\t"$5} {tot+=$5} END{print "totKB:" tot}'    #[^d]是指匹配除去d的字符

                只列出文件名:

                   ls -l|awk '{print $9}'     常規(guī)情況文件名是第9域

            awk內(nèi)置字符串函數(shù):

                gsub(r,s)           在整個$0中用s替代r

                   awk 'gsub(/name/,"xingming") {print $0}' temp

                gsub(r,s,t)         在整個t中用s替代r

                index(s,t)          返回s中字符串t的第一位置

                   awk 'BEGIN {print index("Sunny","ny")}' temp     返回4

                length(s)           返回s的長度

                match(s,r)          測試s是否包含匹配r的字符串

                   awk '$1=="J.Lulu" {print match($1,"u")}' temp    返回4

                split(s,a,fs)       在fs上將s分成序列a

                   awk 'BEGIN {print split("12#345#6789",myarray,"#")"'

                   返回3,同時myarray[1]="12", myarray[2]="345", myarray[3]="6789"

                sprint(fmt,exp)     返回經(jīng)fmt格式化后的exp

                sub(r,s)            從$0中最左邊最長的子串中用s代替r(只更換第一遇到的匹配字符串)

                substr(s,p)         返回字符串s中從p開始的后綴部分

                substr(s,p,n)       返回字符串s中從p開始長度為n的后綴部分

            printf函數(shù)的使用:

                字符轉(zhuǎn)換: echo "65" |awk '{printf "%c\n",$0}'    輸出A

                         awk 'BEGIN {printf "%f\n",999}'        輸出999.000000

                格式化輸出:awk '{printf "%-15s %s\n",$1,$3}' temp 將第一個域全部左對齊顯示

            其他awk用法:

                向一行awk命令傳值:

                    awk '{if ($5<AGE) print $0}' AGE=10 temp

                    who | awk '{if ($1==user) print $1 " are in " $2 ' user=$LOGNAME 使用環(huán)境變量

                awk腳本命令:

                    開頭使用 !/bin/awk -f  ,如果沒有這句話自含腳本將不能執(zhí)行,例子:

            1. !/bin/awk -f
            2. # all comment lines must start with a hash '#'
            3. # name: student_tot.awk
            4. # to call: student_tot.awk grade.txt
            5. # prints total and average of club student points
            6.  
            7. # print a header first
            8. BEGIN
            9. {
            10.     print "Student    Date   Member No.  Grade  Age  Points  Max"
            11.     print "Name       Joined                         Gained  Point Available"
            12.     print "================================================================="
            13. }
            14. # let's add the scores of points gained
            15. (tot+=$6);   ?
            16. # finished processing now let's print the total and average point
            17. END
            18. {
            19.     print "Club student total points :" tot
            20.     print "Average Club Student points :" tot/NR
            21. }

             

            awk數(shù)組:

                awk的循環(huán)基本結(jié)構(gòu)    For (element in array) print array[element]

            awk 'BEGIN {split("12#345#6789",myarray,"#"); for (a in myarray) print myarray[a]}'

            posted on 2009-09-03 19:34 大龍 閱讀(423) 評論(0)  編輯 收藏 引用

            久久精品国产亚洲AV大全| 久久国产高清字幕中文| 97超级碰碰碰碰久久久久 | 久久免费高清视频| 色综合久久中文字幕综合网| 精品国产综合区久久久久久| 国内精品伊人久久久久影院对白| 伊人色综合久久| 99精品久久精品一区二区| 久久精品99久久香蕉国产色戒 | 亚洲精品乱码久久久久久蜜桃不卡| 国产精品99久久免费观看| 天天做夜夜做久久做狠狠| 久久婷婷午色综合夜啪| 996久久国产精品线观看| 一极黄色视频久久网站| 亚洲乱亚洲乱淫久久| 99精品久久久久久久婷婷| 国内精品久久久久久不卡影院 | 久久超乳爆乳中文字幕| 要久久爱在线免费观看| 国产精品VIDEOSSEX久久发布| 日韩精品久久无码中文字幕| 亚洲日本va午夜中文字幕久久| 久久本道伊人久久| 久久久精品人妻一区二区三区蜜桃| 国产精品99久久免费观看| 久久影视综合亚洲| 伊人久久免费视频| 久久青草国产精品一区| 麻豆AV一区二区三区久久| 久久强奷乱码老熟女网站| 色婷婷久久久SWAG精品| 久久国产午夜精品一区二区三区| 精品久久久久久久久中文字幕| 久久精品国产亚洲av麻豆蜜芽| 三级韩国一区久久二区综合| 久久久精品久久久久特色影视| 丁香久久婷婷国产午夜视频| 久久精品国产一区| 国产日韩久久免费影院|