NCAR Command languageを使用しています。
$ pwd
/work2/am/WORK.OLD/2015.ECS.Convection.Sato.Manda/Skew-T.sounding
$ ls *.sh *.ncl
proc.meisei.run.sh* runncl.sh* skew.T.run.all.sh*
proc.meisei.sh* skew.T.ncl skew.T.run.sh*
一気に実行
$ skew-T.sounding.run.sh
...
... Lots of messages
...
Done skew-T.sounding.run.sh
Log: skew-T.sounding.run.log
分割して実行
$ ls Input.Edit/
327.xls F2011052314S7007208.edit.CSV
F2011052301S7006639.edit.CSV F2011052315S7006675.edit.CSV
F2011052305S7006642.edit.CSV F2011052316S7006678.edit.CSV
F2011052308S7006641.edit.CSV F2011052317S7006677.edit.CSV
F2011052310S7007210.edit.CSV F2011052317S7007211.edit.CSV
F2011052311S7007213.edit.CSV F2011052323S7006672.edit.CSV
F2011052312S7007207.edit.CSV F2011052323S7007212.edit.CSV
F2011052313S7006671.edit.CSV rename.csv.sh*
$ proc.meisei.run.sh
removed `temp.F2011052301S7006639.edit.CSV'
removed `temp2.F2011052301S7006639.edit.CSV'
Input: F2011052301S7006639.edit.CSV Output: Output.proc.meisei.run/001.dat
............................
............................
............................
File list: MandA2011Leg2.list.dat
$ skew.T.run.all.sh
............................
............................
............................
Output.proc.meisei.run/011.dat
Stn.011
nline= 181
ncol= 6
Copyright (C) 1995-2015 - All Rights Reserved
University Corporation for Atmospheric Research
NCAR Command Language Version 6.3.0
The use of this software is governed by a License Agreement.
See http://www.ncl.ucar.edu/ for more details.
(0) Input: temp.011.dat
(0) nlvl= 181
(0) ncol= 6
(0) output: Output.skew.T.run/011.png
(0) Started at 2017年 7月 26日 水曜日 14:18:12 JST
(0) Finished at 2017年 7月 26日 水曜日 14:18:13 JST
removed `temp.011.dat'
$ cat skew-T.sounding.run.sh
#!/bin/sh
export LANG=C
log=$(basename $0 .sh).log
tmp1=$(basename $0 .sh).1.tmp
tmp2=$(basename $0 .sh).2.tmp
date >$log
hostname >>$log
whoami >>$log
pwd >>$log
echo >>$log
sh proc.meisei.run.sh 2>&1 |tee $tmp1
sh skew.T.run.all.sh 2>&1 |tee $tmp2
cat $tmp1 >> $log
echo >> $log
cat $tmp2 >> $log
rm -f $tmp1 $tmp2
echo
echo Done $(basename $0)
echo
echo Log: $log
echo
exit 0
proc.meisei.run.sh
#!/bin/bash
# Description:
#
# Author: AM
#
# Host: aofd165.fish.nagasaki-u.ac.jp
# Directory: /work2/kunoki/to_manda_sensei/Tools/Sonde.AM
#
# Revision history:
# This file is created by /usr/local/mybin/nbscr.sh at 10:07 on 06-05-2014.
cruise=MandA2012Leg3
list_out=${cruise}.list.dat
indir="Input"
if [ ! -d $indir ]; then
echo No such directory, $indir
exit 1
fi
outdir="Output."$(basename $0 .sh)
if [ ! -d $outdir ]; then
mkdir -vp $outdir
fi
list=temp.$(basename $0 .sh).txt
cat <<EOF > $list
F2012061511S7101823.edit.CSV Stn.001.dat
F2012061512S7201269.edit.CSV Stn.002.dat
F2012061513S7201271.edit.CSV Stn.003.dat
F2012061514S7201274.edit.CSV Stn.004.dat
F2012061515S7201275.edit.CSV Stn.005.dat
F2012061516S7201270.edit.CSV Stn.006.dat
F2012061517S7201268.edit.CSV Stn.007.dat
F2012061518S7201267.edit.CSV Stn.008.dat
F2012061519S7201265.edit.CSV Stn.009.dat
F2012061520S7201264.edit.CSV Stn.010.dat
F2012061521S7201266.edit.CSV Stn.011.dat
F2012061522S7101814.edit.CSV Stn.012.dat
F2012061600S7101812.edit.CSV Stn.014.dat
F2012061601S7101816.edit.CSV Stn.015.dat
F2012061602S7101815.edit.CSV Stn.016.dat
F2012061603S7201257.edit.CSV Stn.017.dat
F2012061605S7201256.edit.CSV Stn.018.dat
F2012061607S7201260.edit.CSV Stn.019.dat
EOF
exe=proc.meisei.sh
if [ ! -f $exe ]; then
echo Error in $0 : No such file, $exe
exit 1
fi
echo "# ${cruise}" > ${list_out}
i=1
if [ -f $list ] ; then
while read BUF ; do
ary=(`echo $BUF`) # 配列に格納
input=${ary[0]}
out=${ary[1]}
echo "Input: ${indir}/${input}"
echo "Output: ${outdir}/${out}"
${exe} ${indir}/${input} ${outdir}/${out}
echo
if [ -f ${outdir}/$out ]; then
lines=$(wc -l ${outdir}/$out |awk '{print $1}' )
echo "${indir}/${input} ${outdir}/${out} ${lines}" >> ${list_out}
else
echo Error in ${indir}/$input
fi
done < $list
else
echo "No such file, ${list}."
fi
rm -vf $list
exit 0
# スペース区切りの文字列を配列に格納
# http://linux.just4fun.biz/%E9%80%86%E5%BC%95%E3%81%8D%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88/%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E5%8C%BA%E5%88%87%E3%82%8A%E3%81%AE%E6%96%87%E5%AD%97%E5%88%97%E3%82%92%E9%85%8D%E5%88%97%E3%81%AB%E6%A0%BC%E7%B4%8D%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95.html#q5793445
proc.meisei.sh
#!/bin/bash
# Description:
#
# Author: AM
#
# 明星ゾンデデータ整理
#
#
# Host: aofd165.fish.nagasaki-u.ac.jp
# Directory: /work2/kunoki/to_manda_sensei/Tools
#
# Revision history:
# This file is created by /usr/local/mybin/nbscr.sh at 10:00 on 06-05-2014.
if [ $# -ne 2 ]; then
echo Error in $0 : Wrong number of arugments
echo Usage: $0 input output
exit 1
fi
in=$1
out=$2
echo "# Input : "$in > $out
echo "# P [hPa] wd [deg] ws [m/s] z [m] T [degC] RH [%]" >> $out
NaN="NaN"
fillvalue=-999
echo "# ${fillvalue} = Outlier" >> $out
# awk : 必要なデータの抜き出し
# $12=高度 $10=風向 $11=風速 $21=気圧 $22=気温 $23=湿度
#
# sort: 並べ替え
# filter1d: 平滑化
# Using height as a vertical coordinate
#awk 'BEGIN{FS=","}{if (NR>7) print $12,$10,$11,$21,$22,$23}' $in|\
#sort -n | \
#filter1d -Fb30 -T30/15000/30 -N6/0 > $out
# Using pressure as a vertical coordinate
temp=temp.$(basename $in)
awk 'BEGIN{FS=","}{if (NR>7 && $21 !="------") print \
$21,$10,$11,$12,$22,$23}' $in|\
sort -n |\
filter1d -Fb5 -T100/1020/5 -N6/0 >> $temp
# Set missing value
temp2=temp2.$(basename $in)
sed -e "s/${NaN}/${fillvalue}/g" $temp >> $temp2
awk '{printf "%7.1f %10.3f %10.4f %10.1f %10.4f %10.1f\n",\
$1,$2,$3,$4,$5,$6}' $temp2 >> $out
rm -fv $temp $temp2
skew.T.run.all.sh
skew.T.run.sh Output.proc.meisei.run/Stn.001.dat Stn.001
skew.T.run.sh Output.proc.meisei.run/Stn.002.dat Stn.002
skew.T.run.sh Output.proc.meisei.run/Stn.003.dat Stn.003
skew.T.run.sh Output.proc.meisei.run/Stn.004.dat Stn.004
skew.T.run.sh Output.proc.meisei.run/Stn.005.dat Stn.005
skew.T.run.sh Output.proc.meisei.run/Stn.006.dat Stn.006
skew.T.run.sh Output.proc.meisei.run/Stn.007.dat Stn.007
skew.T.run.sh Output.proc.meisei.run/Stn.008.dat Stn.008
skew.T.run.sh Output.proc.meisei.run/Stn.009.dat Stn.009
skew.T.run.sh Output.proc.meisei.run/Stn.010.dat Stn.010
skew.T.run.sh Output.proc.meisei.run/Stn.011.dat Stn.011
skew.T.run.sh Output.proc.meisei.run/Stn.012.dat Stn.012
skew.T.run.sh Output.proc.meisei.run/Stn.014.dat Stn.014
skew.T.run.sh Output.proc.meisei.run/Stn.015.dat Stn.015
skew.T.run.sh Output.proc.meisei.run/Stn.016.dat Stn.016
skew.T.run.sh Output.proc.meisei.run/Stn.017.dat Stn.017
skew.T.run.sh Output.proc.meisei.run/Stn.018.dat Stn.018
skew.T.run.sh Output.proc.meisei.run/Stn.019.dat Stn.019
skew.T.run.sh
#!/bin/sh
exe=./runncl.sh
testing=n
ncl=skew.T.ncl
in=$1
stn=$2
echo $in
echo $stn
temp=temp.$(basename ${in})
awk '{if($1!="#")printf "%7.1f %10.3f %10.4f %10.1f %10.4f %10.1f\n", \
$1, $2, $3, $4, $5, $6}' $in > $temp
nline=$(cat $temp |wc -l)
ncol=6
echo "nline= "$nline
echo "ncol= "$ncol
outdir=Output.$(basename $0 .sh)
if [ ! -d $outdir ]; then
mkdir -vp $outdir
fi
out=${outdir}/$(basename $in .dat).png
$exe $ncl "$stn" "$temp" "$nline" "$ncol" "$out"
rm -fv $temp
exit 0
runncl.sh
#!/bin/bash
#
# Universal wrapper script for ncl.
# Pass arguments from the command line to environment variables
#
# version 0.1, Thierry Corti, C2SM ETH Zurich
#
E_BADARGS=65
if [ ! -n "$1" ]
then
echo "Usage: `basename $0` script.ncl argument1 argument2 etc."
exit $E_BADARGS
fi
# save number of arguments to environment variable NCL_N_ARG
export NCL_N_ARGS=$#
# save command line arguments to environment variable NCL_ARG_#
for ((index=1; index<=$#; index++))
do
eval export NCL_ARG_$index=\$$index
done
# run ncl
ncl $1
skew.T.ncl
; dewtemp_trh
; http://www.ncl.ucar.edu/Document/Functions/Built-in/dewtemp_trh.shtml
; Dew Point Calculator
; http://www.dpcalc.org/
; Skew-T
; https://www.ncl.ucar.edu/Applications/skewt.shtml
; Missing values in NCL
; http://www.ncl.ucar.edu/Document/Language/fillval.shtml
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/skewt_func.ncl"
begin
wallClock1 = systemfunc("date") ; retrieve wall clock time
scriptname = getenv("NCL_ARG_1")
stn = getenv("NCL_ARG_2")
input = getenv("NCL_ARG_3")
nline = getenv("NCL_ARG_4")
ncolm = getenv("NCL_ARG_5")
output = getenv("NCL_ARG_6")
nlvl=stringtointeger(nline) ;155
ncol=stringtointeger(ncolm) ;6
TestData = asciiread (input , (/nlvl,ncol/), "float")
; print(TestData)
p = TestData (:,0)
wdir = TestData (:,1)
wspd = TestData (:,2)
z = TestData (:,3)
tc = TestData (:,4)
rh = TestData (:,5)
p@_FillValue = -999.0
wdir@_FillValue = -999.0
wspd@_FillValue = -999.0
z@_FillValue = -999.0
rh@_FillValue = -999.0
tc@_FillValue = -999.0000
p@units = "hPa"
wdir@units = "deg"
wspd@units = "m/s"
z@units = "m"
rh@units = "%"
tc@units = "C"
tk= new( (/nlvl/),"float")
tdk=new( (/nlvl/),"float")
tdc=new( (/nlvl/),"float")
do k=0,nlvl-1
if( ismissing(tc(k)))then
tk(k)=tc@_FillValue
else
tk(k) = tc(k) + 273.15 ; C ==> Kelvin
tdk(k) = dewtemp_trh(tk(k),rh(k)) ; dew pt temperature [K]
tdc(k) = tdk(k)-273.15 ; [C]
end if
end do
tk@_FillValue = -999.0
tdk@_FillValue = -999.0
tdc@_FillValue = -999.0
tk@units = "K" ; add "units" attribute
tdk@units = "K" ; add "units" attribute
tdc@units = "C" ; add "units" attribute
; print(tdc)
;*************************
; create plot
;*************************
wks = gsn_open_wks ("png", output)
; --- Create background skew-T; plot sounding ---------------------
skewtOpts = True
skewtOpts@DrawColAreaFill = True ; default is False
dataOpts = True ; options describing data and ploting
dataOpts@Wthin = 5 ; plot every n-th wind barb
skewtOpts@tiMainString = stn
skewtOpts@DrawFahrenheit = False ; default is True
skewt_bkgd = skewT_BackGround (wks, skewtOpts)
skewt_data = skewT_PlotData (wks, skewt_bkgd, p,tc,tdc,z \
, wspd,wdir, dataOpts)
draw (skewt_bkgd)
draw (skewt_data)
frame(wks)
print("Input: " + input)
print("nlvl= " + nlvl)
print("ncol= " + ncol)
print("output: " + output)
wallClock2 = systemfunc("date") ; retrieve wall clock time
print("Started at " + wallClock1)
print("Finished at " + wallClock2)
end