敏捷、分布式、ALM過程自動化、企業應用架構
          posts - 14, comments - 0, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          Example 2-2. A program for finding the maximum recorded temperature by year from NCDC weather records

          #!/usr/bin/env bash

          for year in all/*

          do

            echo -ne `basename $year .gz`"\t"

            gunzip -c $year | \

              awk '{ temp = substr($0, 88, 5) + 0;

                     q = substr($0, 93, 1);

                     if (temp !=9999 && q ~ /[01459]/ && temp > max) max = temp }

                   END { print max }'

          done

           

          使用linux腳本打印每年最高溫度,先解釋一下該腳本幾個注意點。

          腳本目的是發現每年的最高溫度,第一句for year in 后的all/*表示在名稱為all的文件夾下每年度的溫度信息都以 1990.gz 方式存在。使用gunzip方式解壓并打印,對打印的內容使用awk函數進行處理,獲取最大溫度,單個文件處理完畢后打印max

           

          在上一篇中獲取的數據包是這樣,年度為文件夾,當中包含若干個溫度詳情文件。

          E:\testData\1990\010010-9999-1990.gz

          E:\testData\1990\010014-9999-1990.gz

          E:\testData\1990\010015-9999-1990.gz

          E:\testData\1990\010016-9999-1990.gz

           

          從后面Appendix C的描述中得知,實際上作者對這樣的數據進行了處理,因為hadoop在處理大量的小文件時無法達到很高的效率,因此作者使用hadoop將小文件合并,并且給出了代碼。

           

          我比較希望能夠使用腳本處理,將所有的gz解壓之后,合并成為一個文件,打包成gz的格式,這樣就能完全符合之前那段腳本的處理方式。所以,腳本如下:

          packyear

          #! /bin/sh

          # /usr/data/packyear

           

          # unzip all gz files in data

          for yeards in data/*

          do

                 # unzip all gz files in year directory

                 for gzfile in $yeards/*

                 do

                        gunzip $gzfile

                 done

                

                 # cat all content to year file

                 cat $yeards/* | head -2 >> $yeards.tc

           

                 # remove year directory

                 rm -rf $yeards

                 mv $yeards.tc $yeards

           

                 # zip the tc file

                 gzip $yeards

          done

           

          根據實際路徑改寫的計算最大溫度的腳本

          maxyear

          #! /bin/sh

          # /usr/data/ maxyear

           

          for year in /usr/data/*

          do

            basename $year .gz

            gunzip -c $year | \

              awk '{temp=substr($0, 88, 5)+0;

                  q=substr($0, 93, 1);

                  if(temp !=9999 && q ~ /[01459]/ && temp > max) max = temp}

                END {print max}'

          done

          這個腳本最終顯示出來會是:

          1990

          3

          這樣的格式。由于對數據結構的不熟悉,所以不確定顯示出來的數據是否正確,但是基本的腳本和數據操作方式就是這樣了。

          主站蜘蛛池模板: 桃江县| 屏山县| 桦南县| 浦江县| 鄂伦春自治旗| 邢台市| 马关县| 乐亭县| 定襄县| 武平县| 全南县| 新安县| 济源市| 紫金县| 儋州市| 资兴市| 朝阳县| 油尖旺区| 吉木萨尔县| 新昌县| 凉城县| 子洲县| 文成县| 海兴县| 萨嘎县| 肥西县| 基隆市| 博兴县| 东海县| 昌都县| 土默特右旗| 吴忠市| 章丘市| 黄平县| 巍山| 孙吴县| 祁门县| 沈丘县| 仁化县| 汝南县| 固镇县|