• <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>
            posts - 297,  comments - 15,  trackbacks - 0
            以前還在玩UNIX的時(shí)候就覺得里面有個(gè)命令很好用AWK,功能強(qiáng)大.還有SED和ED,用這三個(gè)命令就可以解決平時(shí)工作中的問題。
            前幾天在單位做報(bào)批量處理時(shí),要是用手工一個(gè)網(wǎng)點(diǎn)一個(gè)網(wǎng)點(diǎn)慢慢的改的話,不通宵也得搞到3、4點(diǎn)鐘。對于我這種懶人,那是很痛苦的事,于是只得做些懶人喜歡做的事了。花了二十分鐘左右,終于把SHELL的腳本寫好,每次處理43個(gè)網(wǎng)點(diǎn)的報(bào)表,用時(shí)不到15秒。
            腳本中所用命令為:
            find
            awk
            由于長時(shí)間沒有寫SHELL里的腳本了,花了好些時(shí)間測試,這里重溫下AWK的一些常用的用法:
            awk 用法:awk ' pattern {action} '
            變量名   含義
            ARGC   命令行變元個(gè)數(shù)
            ARGV   命令行變元數(shù)組
            FILENAME  當(dāng)前輸入文件名
            FNR   當(dāng)前文件中的記錄號
            FS   輸入域分隔符,默認(rèn)為一個(gè)空格
            RS   輸入記錄分隔符
            NF   當(dāng)前記錄里域個(gè)數(shù)
            NR   到目前為止記錄數(shù)
            OFS   輸出域分隔符
            ORS   輸出記錄分隔符
            1、awk '/101/' file 顯示文件file中包含101的匹配行。
            awk '/101/,/105/' file
            awk '$1 == 5' file
            awk '$1 == "CT"' file 注意必須帶雙引號
            awk '$1 * $2 >100 ' file
            awk '$2 >5 && $2<=15' file
            2、awk '{print NR,NF,$1,$NF,}' file 顯示文件file的當(dāng)前記錄號、域數(shù)和每一行的第一個(gè)和最后一個(gè)域。
            awk '/101/ {print $1,$2 + 10}' file 顯示文件file的匹配行的第一、二個(gè)域加10。
            awk '/101/ {print $1$2}' file
            awk '/101/ {print $1 $2}' file 顯示文件file的匹配行的第一、二個(gè)域,但顯示時(shí)域中間沒有分隔符。
            3、df | awk '$4>1000000 ' 通過管道符獲得輸入,如:顯示第4個(gè)域滿足條件的行。
            4、awk -F "|" '{print $1}' file 按照新的分隔符“|”進(jìn)行操作。
            awk 'BEGIN { FS="[: \t|]" }
            {print $1,$2,$3}' file 通過設(shè)置輸入分隔符(FS="[: \t|]")修改輸入分隔符。
            Sep="|"
            awk -F $Sep '{print $1}' file 按照環(huán)境變量Sep的值做為分隔符。
            awk -F '[ :\t|]' '{print $1}' file 按照正則表達(dá)式的值做為分隔符,這里代表空格、:、TAB、|同時(shí)做為分隔符。
            awk -F '[][]' '{print $1}' file 按照正則表達(dá)式的值做為分隔符,這里代表[、]
            5、awk -f awkfile file 通過文件awkfile的內(nèi)容依次進(jìn)行控制。
            cat awkfile
            /101/{print "\047 Hello! \047"} --遇到匹配行以后打印 ' Hello! '.\047代表單引號。
            {print $1,$2} --因?yàn)闆]有模式控制,打印每一行的前兩個(gè)域。
            6、awk '$1 ~ /101/ {print $1}' file 顯示文件中第一個(gè)域匹配101的行(記錄)。
            7、awk 'BEGIN { OFS="%"}
            {print $1,$2}' file 通過設(shè)置輸出分隔符(OFS="%")修改輸出格式。
            8、awk 'BEGIN { max=100 ;print "max=" max} BEGIN 表示在處理任意行之前進(jìn)行的操作。
            {max=($1 >max ?$1:max); print $1,"Now max is "max}' file 取得文件第一個(gè)域的最大值。
            (表達(dá)式1?表達(dá)式2:表達(dá)式3 相當(dāng)于:
            if (表達(dá)式1)
            表達(dá)式2
            else
            表達(dá)式3
            awk '{print ($1>4 ? "high "$1: "low "$1)}' file
            9、awk '$1 * $2 >100 {print $1}' file 顯示文件中第一個(gè)域匹配101的行(記錄)。
            10、awk '{$1 == 'Chi' {$3 = 'China'; print}' file 找到匹配行后先將第3個(gè)域替換后再顯示該行(記錄)。
            awk '{$7 %= 3; print $7}' file 將第7域被3除,并將余數(shù)賦給第7域再打印。
            11、awk '/tom/ {wage=$2+$3; printf wage}' file 找到匹配行后為變量wage賦值并打印該變量。
            12、awk '/tom/ {count++;}
            END {print "tom was found "count" times"}' file END表示在所有輸入行處理完后進(jìn)行處理。
            13、awk 'gsub(/\$/,"");gsub(/,/,""); cost+=$4;
            END {print "The total is $" cost>"filename"}' file gsub函數(shù)用空串替換$和,再將結(jié)果輸出到filename中。
            1 2 3 $1,200.00
            1 2 3 $2,300.00
            1 2 3 $4,000.00
            awk '{gsub(/\$/,"");gsub(/,/,"");
            if ($4>1000&&$4<2000) c1+=$4;
            else if ($4>2000&&$4<3000) c2+=$4;
            else if ($4>3000&&$4<4000) c3+=$4;
            else c4+=$4; }
            END {printf "c1=[%d];c2=[%d];c3=[%d];c4=[%d]\n",c1,c2,c3,c4}"' file
            通過if和else if完成條件語句
            awk '{gsub(/\$/,"");gsub(/,/,"");
            if ($4>3000&&$4<4000) exit;
            else c4+=$4; }
            END {printf "c1=[%d];c2=[%d];c3=[%d];c4=[%d]\n",c1,c2,c3,c4}"' file
            通過exit在某條件時(shí)退出,但是仍執(zhí)行END操作。
            awk '{gsub(/\$/,"");gsub(/,/,"");
            if ($4>3000) next;
            else c4+=$4; }
            END {printf "c4=[%d]\n",c4}"' file
            通過next在某條件時(shí)跳過該行,對下一行執(zhí)行操作。

            14、awk '{ print FILENAME,$0 }' file1 file2 file3>fileall 把file1、file2、file3的文件內(nèi)容全部寫到fileall中,格式為
            打印文件并前置文件名。
            15、awk ' $1!=previous { close(previous); previous=$1 }
            {print substr($0,index($0," ") +1)>$1}' fileall 把合并后的文件重新分拆為3個(gè)文件。并與原文件一致。
            16、awk 'BEGIN {"date"|getline d; print d}' 通過管道把date的執(zhí)行結(jié)果送給getline,并賦給變量d,然后打印。
            17、awk 'BEGIN {system("echo "Input your name:\\c""); getline d;print "\nYour name is",d,"\b!\n"}'
            通過getline命令交互輸入name,并顯示出來。
            awk 'BEGIN {FS=":"; while(getline< "/etc/passwd" >0) { if($1~"050[0-9]_") print $1}}'
            打印/etc/passwd文件中用戶名包含050x_的用戶名。
            18、awk '{ i=1;while(i<NF) {print NF,$i;i++}}' file 通過while語句實(shí)現(xiàn)循環(huán)。
            awk '{ for(i=1;i<NF;i++) {print NF,$i}}' file 通過for語句實(shí)現(xiàn)循環(huán)。
            type file|awk -F "/" '
            { for(i=1;i<NF;i++)
            { if(i==NF-1) { printf "%s",$i }
            else { printf "%s/",$i } }}' 顯示一個(gè)文件的全路徑。
            用for和if顯示日期
            awk 'BEGIN {
            for(j=1;j<=12;j++)
            { flag=0;
            printf "\n%d月份\n",j;
            for(i=1;i<=31;i++)
            {
            if (j==2&&i>28) flag=1;
            if ((j==4||j==6||j==9||j==11)&&i>30) flag=1;
            if (flag==0) {printf "%02d%02d ",j,i}
            }
            }
            }'
            19、在awk中調(diào)用系統(tǒng)變量必須用單引號,如果是雙引號,則表示字符串
            Flag=abcd
            awk '{print '$Flag'}' 結(jié)果為abcd
            awk '{print "$Flag"}' 結(jié)果為$Flag
            轉(zhuǎn)自:
            http://blog.chinaunix.net/u/28584/showart.php?id=1712347
            posted on 2009-11-23 21:20 chatler 閱讀(215) 評論(0)  編輯 收藏 引用 所屬分類: Shell
            <2009年11月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            常用鏈接

            留言簿(10)

            隨筆分類(307)

            隨筆檔案(297)

            algorithm

            Books_Free_Online

            C++

            database

            Linux

            Linux shell

            linux socket

            misce

            • cloudward
            • 感覺這個(gè)博客還是不錯(cuò),雖然做的東西和我不大相關(guān),覺得看看還是有好處的

            network

            OSS

            • Google Android
            • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
            • os161 file list

            overall

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            久久精品中文字幕有码| 国产69精品久久久久9999APGF | 久久福利资源国产精品999| 99久久久国产精品免费无卡顿| 久久天天躁夜夜躁狠狠躁2022| 久久最新免费视频| 很黄很污的网站久久mimi色| www.久久精品| 99久久免费只有精品国产| 99久久国产亚洲高清观看2024 | 精品久久久久一区二区三区| 国产成人精品久久免费动漫 | 无码乱码观看精品久久| 很黄很污的网站久久mimi色| 欧美日韩中文字幕久久久不卡| 亚洲国产成人久久综合野外| 婷婷国产天堂久久综合五月| 久久婷婷是五月综合色狠狠| 欧美亚洲国产精品久久高清| 囯产精品久久久久久久久蜜桃| 人妻无码中文久久久久专区 | 中文字幕亚洲综合久久2| 久久久精品久久久久久 | 精品国产乱码久久久久软件| 国产亚洲美女精品久久久2020| 色8久久人人97超碰香蕉987| 国产精品久久久久jk制服| 国产成人精品久久亚洲| 亚洲国产香蕉人人爽成AV片久久| 伊人久久综合无码成人网| 精品久久香蕉国产线看观看亚洲| 久久久久国产一级毛片高清板 | 亚洲国产另类久久久精品黑人| 久久精品中文騷妇女内射| 国产69精品久久久久99尤物| 偷窥少妇久久久久久久久| 久久国产乱子精品免费女| 久久亚洲国产成人影院| 国产农村妇女毛片精品久久| 久久久久国产精品人妻| 久久久久国色AV免费看图片|