我正在嘗試使用名爲uvspec的基於終端的程序來運行大量計算(僅超過200萬)的Bash腳本。但我已經打了以下的最新計算的嚴重障礙......BASH腳本條件語句問題
腳本,打開它有2E^6線看起來像這樣的輸入文件:
0 66.3426 -9.999 -9999
0 66.6192 -9.999 -9999
0 61.9212 1.655 1655
0 61.9999 1.655 1655
...
每個值代表我想替換爲輸入文件的不同值(使用sed),因此我將每行讀入一個數組。這些行中的許多行在第4列中包含負值,例如-9999,導致程序中出現錯誤,因此我想省略這些行並返回標準輸出 - 我正在使用if語句執行此操作...問題是一些可怕的錯誤是從我的輸出中提取出來的,米99.9%確定問題是在以下腳本中的錯誤,因爲我對bash相當陌生。
任何人都可以在這裏發現任何沒有意義或語法錯誤的東西嗎?
對腳本的一般評論也是有用的反饋。
cat ".../Maps/dniinput" | while IFS=$' ' read -r -a myArray
do
if [ "${myArray[3]}" -gt 0 ]
then
sed s/TAU/"${myArray[0]}"/ x.template x.template > a.template
sed s/SZA/"${myArray[1]}"/ a.template a.template > b.template
sed s/ALT/"${myArray[2]}"/ b.template b.template > x.inp
../bin/uvspec <x.inp>> dni.out
else
echo "0 -9999" >> dnijul.out
fi
done
你能否具體談談是什麼問題?你指的是'x.inp'包含8個'x.template'的副本嗎?這是因爲您爲每個sed指定了兩次 –
基本上,每條線都對應於經度,緯度圖上的特定位置。第四列的高度爲整數公里。 -9999的高度對應于海洋。當我在輸入文件中繪製高度時,我會得到非常準確的世界地圖。我希望我的腳本所做的是爲每個位置返回「0 -9999」,而不用打擾計算,但是當我繪製輸出文件時,-9999s混亂起來,絕不會像世界地圖! – fred