mk-mode BLOG

このブログは自作の自宅サーバに構築した Debian GNU/Linux で運用しています。
PC・サーバ構築等の話題を中心に公開しております。(クローンサイト: GitHub Pages

ブログ開設日2009-01-05
サーバ連続稼働時間
Reading...
Page View 合計
Reading...
今日
Reading...
昨日
Reading...

Bash - NOAA 気象観測所検索!

[ pc_tips ] [ Linux, bash, シェル ]

こんばんは。

前回は、NOAA - National Oceanic and Atmospheric Administration(アメリカ海洋大気庁)の所有する世界中の気象観測所一覧、それらを国別に集計する Ruby スクリプトを紹介しました。

今回は、指定した ICAO コードに一致する空港(気象観測所)の情報を検索するシェル(Bash)スクリプトを紹介します。(単純に取得したテキストファイル内を検索しているだけですが)

0. 前提条件

  • GNU bash, バージョン 4.2.25(1)-release での作業を想定。

1. Bash スクリプト作成

以下のように Bash スクリプトを作成した。(英字は大文字限定)

noaa_weather_station.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/bin/bash

# 引数(ICAO コード)不正なら終了
if [[ ! "$1" =~ [0-9A-Z]{4} ]]; then
    echo "Wrong argument! - $1"
    exit
fi

# 定数定義
URL="http://www.aviationweather.gov/static/adds/metars/stations.txt"
FILE="stations.txt"
HEADER="CD  STATION         ICAO  IATA  SYNOP   LAT     LONG   ELEV   M  N  V  U  A  C"
FLAG=0

# satations.txt 取得
wget -q -N ${URL}

# IFS は文字列リストのフィールド区切り文字で、デフォルトは半角スペース。
# 行をそのまま取り込むために IFS を改行に変更
OLDIFS="$IFS"
IFS="\n"

# 1行ずつ読み込み、引数と一致する ICAO コードの行を表示
while read LINE
do
    if [ "${LINE:20:4}" = $1 ]; then
        echo $HEADER
        echo $LINE
        FLAG=1
        break
    fi
done < "$FILE"

# 一致する ICAO コードが存在しなければ、メッセージ出力
if [ $FLAG = 0 ]; then
    echo "Not found! - $1"
fi

# IFS を元に戻す
IFS="$OLDIFS"

2. Bash スクリプト実行

作成した Bash スクリプトを4文字の半角英数字からなる ICAO コードを引数として実行する。
以下は、 “RJOC"(出雲空港)を検索した例。

1
2
3
$ ./noaa_weather_station.sh RJOC
CD  STATION         ICAO  IATA  SYNOP   LAT     LONG   ELEV   M  N  V  U  A  C
   IZUMO AIRPORT    RJOC        47790  35 25N  132 52E    5   X     T          7 JP

3. 参考サイト


ICAO コードが分かれば METAR 気象情報も取得できるので、機会があれば挑戦してみようかとも考えています。

以上。

Comments