用awk統計表中值為null的項目

          【需求】
              在項目測試階段,需要將所有表中值為null的字段抽取出來并進行統計。
          【Solution】
              由于DB2部署在AIX系統上,可以在shell環境下編寫awk腳本程序對表掃描,抽取出對象字段。
          【shell程序】
          getNullItem.sh

          #! /usr/bin/ksh

          db2 connect to D3703H0 user d3703bth using d3703bth
          db2 set current schema = DB2I3703

          echo `date` > Output
          for i in `cat tablelist`; do
             db2 "describe table "$i | grep "はい"> itemIn.txt
             awk 'BEGIN{ printf ("select ") > "sqlOut" }{ printf ("count(*) - count(%s) as %s件數,", $1, $1)>> "sqlOut" }' itemIn.txt
             echo "count(*) from "$i >> sqlOut
            
             echo $i >> Output
             db2 `cat sqlOut` >> Output
          done
          echo `date` >> Output
          -------------------------------------------------------------------------
          上述程序中,cat tablelist是顯示保存于文本文件tablelist中的表名,如下:
          【tablelist】
          T37A00F1
          T37A00F2
          T37A00F5
          T37A00M9
          T37A00MB
          T37A00MC
          T37A00MD
          T37A00ME
          T37A00MF
          T37A00MG
          ......

          最后,Output文件里的輸出如下所示:
          【Output】

          Mon Feb 2 17:11:08 JST 2009
          T37A00F1

          HU1N6件數   KA4ZS件數   KA4ZT件數   RE0BK件數   KA4ZN件數   SI0D2件數   SI2UD件數   KI02F件數   KO00N件數   KO01A件數   11        
          ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
                    0           0           0           0           0           0           0           0           0           0          31

            1 レコードが選択されました。

          T37A00F2

          HU1N6件數   HU1MT件數   HU1OK件數   4         
          ----------- ----------- ----------- -----------
                    0           0           0           0

            1 レコードが選択されました。

          T37A00F5

          1         
          -----------
                    0

            1 レコードが選択されました。

          T37A00M9

          SI2B9件數   KA08P件數   MI0H4件數   TO19V件數   SI44Q件數   SI0X6件數   7         
          ----------- ----------- ----------- ----------- ----------- ----------- -----------
                    0           0           0           0           0           0           0

            1 レコードが選択されました。

          T37A00MB

          1         
          -----------
                 1911

            1 レコードが選択されました。
          -------------------------------------------------------------------------
          【awk程序】
          processOutput.awk

          #!/bin/awk -f

          BEGIN {
            #テーブル名
            tableName = "";
            #件數出力行の計數
            counter = 0;
            #項目名Array
            itemName[1] = "";
          }
          {
            if (NR == 1) {
              print "GAIN DBテーブルにはNULLを含める項目がまとめて表示:" > "Output2";
              print $0, "\n\n" >> "Output2";
            } else if (match($0, /:/) != 0) {
              print $0 >> "Output2";
            } else {
              if (match($1, /T37A00/) != 0) {
                #テーブル名取得
                tableName = $1;
              }
             
              if (match($1, /件數/) != 0) {
                #項目名取得
                for (i = 1; i <= NF - 1; i ++) {
                  itemName[i] = $i;
                }
              }
             
              if (NR == 8 * counter + 6) {
                #件數値取得処理
                for (i = 1; i <= NF - 1; i ++) {
                  if ($i != 0) {
                    hasValue = 1;
                    break;
                  }
                }
               
                if (hasValue == 1) {
                  printf "%s\n\n", tableName >> "Output2";
                  for (i = 1; i <= NF - 1; i ++) {
                    if ($i != 0) {
                      printf "%s   ", itemName[i] >> "Output2";
                    }
                  }
                  firstItem = 0;
                  for (i = 1; i <= NF - 1; i ++) {
                    if ($i != 0) {
                      if (firstItem == 0) {
                        printf "\n----------  " >> "Output2";
                        firstItem ++;
                      } else {
                        printf "----------  " >> "Output2";
                      }
                    }
                  }
                  firstItem = 0;
                  for (i = 1; i <= NF - 1; i ++) {
                    if ($i != 0) {
                      if (firstItem == 0) {
                        printf "\n%9s   ", $i >> "Output2";
                        firstItem ++;
                      } else {
                        printf "%9s   ", $i >> "Output2";
                      }
                    }
                  }
                  print "\n\n" >> "Output2";
                }
               
                hasValue = 0;
                counter ++;
              }
            }
          }
          ------------------------------------------------------------------------
          輸出結果如下:
          【Output2】

          GAIN DBテーブルにはNULLを含める項目がまとめて表示:
          Mon Feb 2 17:11:08 JST 2009

          T37A00MF

          ME0A8件數  
          ---------- 
              14419  


          T37A00MG

          ME0A8件數   EE0QJ件數   KA4ZQ件數   ME0KS件數   HE0CE件數   SO0UD件數   TO1A6件數   HU1NL件數   HA0RM件數  
          ----------  ----------  ----------  ----------  ----------  ----------  ----------  ----------  ---------- 
               1888           2        1888        1888        1888        1888        1888        1888        1888  


          T37A00MW

          KU026件數   WA03J件數   HA01E件數   KE1NR件數   KA07B件數   TA10K件數   HA045件數  
          ----------  ----------  ----------  ----------  ----------  ----------  ---------- 
                294         294         294         294         294         294         294  


          T37A00S3

          KO1N6件數  
          ---------- 
               4252  


          T37A00S6

          HU1MJ件數   HU1MK件數   HU1ML件數   HU1MM件數   HU1MN件數   AA01A件數   SI0D2件數   SI2UD件數  
          ----------  ----------  ----------  ----------  ----------  ----------  ----------  ---------- 
               1795        1795        1795        1795        1795        1795        1789        1789  

          posted on 2009-04-24 13:56 koradji 閱讀(686) 評論(0)  編輯  收藏 所屬分類: awk


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2009年4月>
          2930311234
          567891011
          12131415161718
          19202122232425
          262728293012
          3456789

          導航

          統計

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          db2

          dos

          Groovy

          Hibernate

          java

          WAS

          web application

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 张家川| 郸城县| 四子王旗| 大冶市| 玉环县| 张北县| 南陵县| 建水县| 贞丰县| 文登市| 武汉市| 镇江市| 二连浩特市| 康定县| 高要市| 梅州市| 丰镇市| 久治县| 龙州县| 双牌县| 乌兰察布市| 抚远县| 朝阳县| 遵义市| 青龙| 岳普湖县| 西充县| 新竹县| 余姚市| 郁南县| 碌曲县| 改则县| 安阳市| 盐津县| 西乌| 灵川县| 中山市| 泸西县| 江陵县| 青浦区| 丹阳市|