• <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 閱讀(222) 評論(0)  編輯 收藏 引用 所屬分類: Shell
            <2009年5月>
            262728293012
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            常用鏈接

            留言簿(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无码久久不卡| 91精品国产91久久久久久蜜臀| 国产精品热久久毛片| 久久天天躁狠狠躁夜夜av浪潮| 亚洲va久久久噜噜噜久久狠狠 | 国产午夜精品理论片久久| 三级片免费观看久久| 99久久精品国产免看国产一区| 久久精品不卡| 久久99精品国产99久久6男男| 国产精品久久久久久久app| 99久久成人国产精品免费 | 午夜人妻久久久久久久久| 精品久久久久久无码中文字幕| 久久久久无码精品国产| 久久久久久久亚洲精品| 97久久精品人妻人人搡人人玩| 久久精品国产男包| 亚洲国产成人久久精品99| AAA级久久久精品无码区| 九九久久自然熟的香蕉图片| 无码人妻久久一区二区三区蜜桃| 亚洲伊人久久大香线蕉苏妲己| 欧美喷潮久久久XXXXx| 久久精品青青草原伊人| 日批日出水久久亚洲精品tv| 久久久久久久综合日本| 婷婷久久综合九色综合98| 2021久久精品国产99国产精品| 亚洲精品乱码久久久久久按摩| 亚洲中文久久精品无码ww16| 色婷婷久久久SWAG精品| 婷婷久久综合| 亚洲国产精品无码久久一区二区 | 久久久久久综合网天天| 中文字幕精品无码久久久久久3D日动漫| 99久久99久久精品国产片| 国产激情久久久久影院| 一本一道久久精品综合| 久久精品国产99久久香蕉|