2014-07-03 93 views
0

我是shell腳本編程新手,我試圖自動化一個進程。 我認爲結構是好的,但我得到通知,我認爲它不應該存在Bash-shell腳本修改和建議

# STEP 1# 
echo " Untar the file s" 
time tar -xf $tarfiles 
time tar -xf *.tar 

#STEP 2# 
fname=(wnd10m.gdas.2010*.grb2) 
echo " convert into .nc " 
cdo -f nc copy $fname $fname.nc 

#STEP 3# 
ofile1=$fname.nc 
echo "re-format into structured grid 0.5x0.5" 
cdo remapbil,r720x361 $ofile1 remap$R.nc 

#STEP 4# 
ofile2=$remapR.nc 
echo "produce desired mesh" 
cdo sellonlatbox,lon1,lon2,lat1,lat2 $ofile2 $grid.nc 

#STEP 5# 
ofile3=$grid.nc 
echo "merge the files based on tstep" 
cdo mergetime $ofile3 final$R.nc 

步驟1和2,儘管它只是操縱進行,並改變它被列入該文件的一個.tar文件。

方法到目前爲止給出的步驟1 & 2,但在步驟3期間,我不其中R是這樣產生的不與在先前步驟中產生的其它混淆的附加結束得到新的文件作爲remap$R.nc

後,我運行它,這是我所得到的

convert into .nc 

cdo copy: Processed 987365376 values from 2 variables over 744 timesteps (234.66s) 
re-format into structured grid 0.5x0.5 

cdo remapbil: Processed 987365376 values from 2 variables over 744 timesteps (53.59s) 
produce desired mesh 

Error (cdo sellonlatbox) : Output file name .nc is equal to input file name on position 1! 

merge the files based on tstep 

cdo mergetime: Open failed on >.nc< 
No such file or directory 

我試圖去想跟我的文件,但不知道我做錯了,因爲這個過程應該處理很多文件將其轉換爲每個階段,我非常重視分配正確的和不同的fnames

如果你能看一看,並給我你的意見,我將不勝感激。

p.s. CDO是我使用的,所以你可以忽略它的代碼,我的重點是過程本身

感謝

回答

1

比較這些:

cdo remapbil,r720x361 $ofile1 remap$R.nc 

ofile2=$remapR.nc 

這看起來像一個典型錯字

+0

@Bushmils。我做了這種形式,以便在轉換中爲每個文件添加一個不同的結尾,然後將其用作下一組命令的輸入文件 儘管我認爲我弄糟了那部分,但我會改變它,跑。 – George

+0

沒有改變,但結果是 CDO sellonlatbox:打開失敗上> .NC < 沒有這樣的文件或目錄 合併基於TSTEP CDO mergetime文件:打開失敗上> .NC < 沒有這樣的文件或目錄 – George

+0

「做了這種形式,以便爲每個文件添加一個不同的結尾」我不明白。你沒有給變量R分配任何東西,因此其內容未定義,或者你沒有顯示你分配的內容。 –

2

$remapRremap$R不同。移動你的美元符號。

您可以使用set -xv來調試您的腳本。

+0

在每組命令之前或在scipt開始時使用該命令嗎? – George

+0

@George:它會影響在它之後執行的命令。 – choroba

0

您好所有的延續,這個問題我已經和用戶@Bushmills幫我很多(謝謝!!!)

我附上的代碼,我做了我得到的意見,我tes特德和它的作品,所以希望另一個用戶(像我這樣的新手)可能會覺得這很有用。

file="wnd10m.gdas." 
year='2010' 
month='01 02' 
ext="grb2" 

for((y=$year;y<=$year;y++)); 
do 
    for m in $month 
    do 
    fname=$file$y$m.$ext 

    #STEP 1# 
    cdo -f nc copy $fname $fname.nc 

    #STEP 2# 
    ofile1=$fname.nc 

    cdo remapbil,r720x361 $ofile1 R$ofile1 #produces a file with the name of the R+ofile1 

例如,如果一個文件被命名文件的命令會產生一個名爲的RFile #步驟3# ofile2 =($ R * .NC) 使用所有文件的新文件開始有R

cdo sellonlatbox,$lon1,$lon2,$lat1,$lat2 $ofile2 grid_$ofile2 

    done 
done 

感謝您的幫助

+0

很高興它爲你工作。但是......「ofile2 =($ R * .nc)」 - 你確定嗎? (變量R仍然沒有在任何地方定義) –

+0

@Bushmills是的,它的工作,我張貼它,也許有人有類似的問題可能會有所幫助,我編輯上面的代碼來顯示R是什麼。希望它更清晰 – George

+0

現在我只剩下一個有點棘手的最後一步,但希望這段代碼將在社區 – George