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

            14、awk '{ print FILENAME,$0 }' file1 file2 file3>fileall 把file1、file2、file3的文件內容全部寫到fileall中,格式為
            打印文件并前置文件名。
            15、awk ' $1!=previous { close(previous); previous=$1 }
            {print substr($0,index($0," ") +1)>$1}' fileall 把合并后的文件重新分拆為3個文件。并與原文件一致。
            16、awk 'BEGIN {"date"|getline d; print d}' 通過管道把date的執行結果送給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語句實現循環。
            awk '{ for(i=1;i<NF;i++) {print NF,$i}}' file 通過for語句實現循環。
            type file|awk -F "/" '
            { for(i=1;i<NF;i++)
            { if(i==NF-1) { printf "%s",$i }
            else { printf "%s/",$i } }}' 顯示一個文件的全路徑。
            用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中調用系統變量必須用單引號,如果是雙引號,則表示字符串
            Flag=abcd
            awk '{print '$Flag'}' 結果為abcd
            awk '{print "$Flag"}' 結果為$Flag
            轉自:
            http://blog.chinaunix.net/u/28584/showart.php?id=1712347
            posted on 2009-11-23 21:20 chatler 閱讀(208) 評論(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
            • 感覺這個博客還是不錯,雖然做的東西和我不大相關,覺得看看還是有好處的

            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

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            久久人妻少妇嫩草AV无码蜜桃| 中文无码久久精品| 久久国产热这里只有精品| 久久久久亚洲AV成人网人人网站 | 69国产成人综合久久精品| AV狠狠色丁香婷婷综合久久| 久久精品国产99久久久香蕉| 亚洲中文字幕无码久久2017| 久久久精品波多野结衣| 青草国产精品久久久久久| 久久国产成人午夜aⅴ影院 | 综合久久久久久中文字幕亚洲国产国产综合一区首 | 国产精品久久久久AV福利动漫| 久久免费美女视频| 亚洲欧美伊人久久综合一区二区| 99久久99久久精品国产片果冻| 精品久久久久成人码免费动漫| 久久精品一区二区三区不卡| 久久久国产精华液| 久久精品国产99久久丝袜| 国产成人精品免费久久久久| 久久精品国产99国产精品亚洲| 久久人人爽人人爽人人片AV麻豆 | 久久亚洲精品成人AV| 亚洲美日韩Av中文字幕无码久久久妻妇| 日韩精品久久久肉伦网站| 麻豆久久久9性大片| 亚洲国产高清精品线久久| 久久久久国产精品三级网| 9999国产精品欧美久久久久久| 1000部精品久久久久久久久| 久久99精品久久久久久hb无码 | 久久精品免费大片国产大片| 91性高湖久久久久| 品成人欧美大片久久国产欧美... 品成人欧美大片久久国产欧美 | 日韩精品久久无码中文字幕| 久久精品国产精品亚洲精品| 免费精品国产日韩热久久| 中文字幕无码免费久久| 一本一本久久aa综合精品| 久久人人妻人人爽人人爽|