動作環境
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
に記載の方法を用いて、リンクが正常に行われたかチェックする。