• <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點鐘。對于我這種懶人,那是很痛苦的事,于是只得做些懶人喜歡做的事了?;硕昼娮笥遥K于把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

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            亚洲欧美一级久久精品| 久久亚洲精品人成综合网| 99久久免费国产精品| 久久精品成人免费观看97| 污污内射久久一区二区欧美日韩| 久久青青草原精品国产软件| 久久最新免费视频| 久久99久国产麻精品66| 久久精品无码专区免费东京热| 亚洲综合久久综合激情久久| 亚洲日韩欧美一区久久久久我| 久久精品国产清高在天天线| 久久久久人妻一区精品| 国内精品久久久久久99蜜桃| 久久久精品国产Sm最大网站| 亚洲AV日韩AV永久无码久久| 国产精品熟女福利久久AV| 日日躁夜夜躁狠狠久久AV| 久久精品夜色噜噜亚洲A∨| 国产亚洲欧美精品久久久| 三级片免费观看久久| 国产精品久久国产精麻豆99网站| 亚洲国产精品嫩草影院久久| 国产精品久久久久aaaa| 色综合久久久久无码专区| 亚洲国产精品无码久久青草| 国产免费久久久久久无码| 精品久久久久久成人AV| 久久久亚洲AV波多野结衣| 久久久WWW成人免费精品| 品成人欧美大片久久国产欧美...| 亚洲精品乱码久久久久久| 一本久久免费视频| 久久99精品久久久久久秒播| 久久99国产精品一区二区| 成人妇女免费播放久久久 | 久久精品国产亚洲AV麻豆网站| 久久伊人色| 香蕉99久久国产综合精品宅男自 | 国产精品久久久久久影院| 精品蜜臀久久久久99网站|