• <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

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            精品久久久久久久久中文字幕| 精品国产青草久久久久福利| 久久国产高潮流白浆免费观看| 久久精品欧美日韩精品| 国产成人AV综合久久| 久久精品国产99久久久香蕉| 亚洲综合熟女久久久30p| 久久婷婷久久一区二区三区| 少妇被又大又粗又爽毛片久久黑人 | 国产精品日韩欧美久久综合| 亚洲国产成人精品女人久久久| 国内精品伊人久久久久av一坑| 国内精品久久久久久久影视麻豆| 99精品久久久久久久婷婷| 91麻精品国产91久久久久| 天天爽天天狠久久久综合麻豆| 91精品国产综合久久四虎久久无码一级 | 88久久精品无码一区二区毛片 | yy6080久久| 93精91精品国产综合久久香蕉 | 一本大道久久a久久精品综合| 日本加勒比久久精品| 国产精品99久久久久久宅男| 久久人人爽人人爽人人片AV不 | 亚洲精品无码久久久久去q| 久久天天躁狠狠躁夜夜av浪潮 | 亚洲中文久久精品无码ww16| 人妻无码精品久久亚瑟影视| 国产成人久久精品麻豆一区| 国产精品一久久香蕉国产线看| 久久人与动人物a级毛片| 久久免费大片| 一本色道久久88综合日韩精品 | 国产欧美一区二区久久| 18岁日韩内射颜射午夜久久成人| 久久精品综合网| 久久伊人精品一区二区三区| 蜜桃麻豆www久久国产精品| 欧美精品福利视频一区二区三区久久久精品| 亚洲国产精品久久66| 国产精品内射久久久久欢欢|