我正在尝试使用名为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