LoginSignup
0
1

More than 5 years have passed since last update.

WPS / bash > WPS用のGRIBFILEのSymbolic link処理 > 2カ月までの対応

Last updated at Posted at 2017-01-30
動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
WRF v3.7.1
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
GNOME Terminal v2.31.3

関連 http://qiita.com/7of9/items/68827099a5444cae0794

WRF(Weather Research and Forecasting Model)関連。

WPSにおいて、気象データをGRIBFILE.XXXという名前でリンクするスクリプト(link_grib.csh)があるが、自分が行いたい月またぎ(年をまたぐ場合もある)のファイル処理の時に使い勝手が悪い。

無関係な10カ月のデータを含めてSymbolic linkする方法はあるが、bash scriptを作って処理することにした。

v0.1

code

link_grib_170130_exec
#!/bin/env bash

#
# v0.1 Jan,30,2017
#   - set Symbolic links
#   - get file list using 1st and 2nd runtime parameters
# === branched from [26_26_26_exec] ===
#
# v0.3 Jan,30,2017
#   - add Test_ToAlphabets
# v0.2 Jan,30,2017
#   - move to function
# v0.1 Jan,30,2017
#   - implemented in main 
#

ToAlphabets(){
    NUM_ALPH=26 #  number of alphabet
    CHAR_A=65 #  ASCII character code for 'A'

    num_inp=$1 #  input

    num1=$((num_inp % NUM_ALPH + CHAR_A))
    num2=$(((num_inp / NUM_ALPH) % NUM_ALPH + CHAR_A ))
    num3=$(((num_inp / NUM_ALPH / NUM_ALPH) % NUM_ALPH + CHAR_A ))

#   printf '%x %x %x' {$num3,$num2,$num1}
#   echo # just for LF
    printf '%x %x %x' {$num3,$num2,$num1} | xxd -r -p
    echo # just for LF
}

Test_ToAlphabets(){
    for lines in `seq 31 41 592`;do
        echo "$lines:"
        ToAlphabets $lines
    done
}


#Test_ToAlphabets

#for debug
#echo $#

if [ $# -eq 0 ]; then
    echo "Usage:"
    echo "  [cmd] [target prefix1] ( [target prefix2] )"
    echo "  to make symbolic links for WPS"
    echo 
    echo " where ()  is optional"
    exit
fi

# 1. obtain list of files
if [ $# -eq 1 ]; then
    files=$(ls ${1}*)
fi
if [ $# -eq 2 ]; then
    files=$(ls ${1}* ${2}*)
fi

# 2. process for each file (Symbolic link)
PREFIX_FILENAME="GRIBFILE"

rm -f ${PREFIX_FILENAME}*

idx=0
for afile in $files;do
    suffix=$(ToAlphabets $idx)
    echo $afile $PREFIX_FILENAME.$suffix # for debug
    ln -fs $afile $PREFIX_FILENAME.$suffix 
    ((idx++))
done

使い方 > 引数なし > 使い方の表示

$ bash link_grib_170130_exec
Usage:
  [cmd] [target prefix1] ( [target prefix2] )
  to make symbolic links for WPS

 where ()  is optional

使い方 > 1つの月だけリンク

$bash link_grib_170130_exec ~/NCEP_DATA/WORK/fnl_201612

こちらの環境では124個(1カ月分)のファイルがリンクされた。

使い方 > 2つの月をリンク

$bash link_grib_170130_exec ~/NCEP_DATA/WORK/fnl_201612 ~/NCEP_DATA/WORK/fnl_201701

こちらの環境では240個のファイルがリンクされた。
FNLファイルは数時間前にスクリプトで取得して1月29日までの分を取った状態。

3つ以上の月の対応

しない。

自分が処理したいデータが3カ月にまたがることがないため。

追加するのは、以下の部分に処理を追加すればいいだけ。

# 1. obtain list of files
if [ $# -eq 1 ]; then
    files=$(ls ${1}*)
fi
if [ $# -eq 2 ]; then
    files=$(ls ${1}* ${2}*)
fi

チェック

http://qiita.com/7of9/items/50bd3af2704f0075e445
に記載の方法を用いて、リンクが正常に行われたかチェックする。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1