"Integer expression expected" bash if 语句



我正试图从文件"地震_c_am.txt"中提取一些地震发生的xy坐标及其震级,并根据震级将其绘制为各种大小和颜色的圆圈。以下是我目前所拥有的:

25  i=`awk '{ FS = "|" ; print $11}' seismic_c_am.txt`
26
27  if [ "$i" -gt 7 ] ; then
28    awk 'NR%25==0 { FS = "|" ; print $4, $3}' seismic_c_am.txt | psxy $rgn $proj -Sc0.25c -Gred -O -K >> $psfile ;
29  fi
30
31  if [ "$i" -gt 5 ] && [ "$i" -le 7 ] ; then
32  awk 'NR%25==0 { FS = "|" ; print $4, $3}' seismic_c_am.txt | psxy $rgn $proj -Sc0.2c -Gorange -O -K >> $psfile ;
33  fi
34
35  if [ "$i" -le 5 ] ; then
36  awk 'NR%25==0 { FS = "|" ; print $4, $3}' seismic_c_am.txt | psxy $rgn $proj -Sc0.1c -Gyellow -O -K >> $psfile ;
37  fi

这个脚本似乎只是将所有幅度(11美元)打印到终端中,最后一行写道:

.
.
3.6
4.0
1.7
3.6 : integer expression expected

但我不知道这是指哪一行!可能是27号线、31号线还是35号线?(见上文)

Bash不做浮点运算,只做整数运算。

由于你是在与整数进行比较,你可以让awk打印整数部分。

i=`awk '{ FS = "|" ; printf "%d", $11}' seismic_c_am.txt`

如果你想知道是哪一行导致了这些错误,可以在脚本中添加命令set -x以打开跟踪模式:bash会在执行之前打印每一行脚本。如果你只想跟踪脚本的一部分,可以使用set +x关闭跟踪。

由于您要多次重复相同的代码段,因此可能需要对脚本进行一些重组。

i=`awk '{ FS = "|" ; printf "%d", $11}' seismic_c_am.txt`
if [ $i -ge 7 ]; then
  sc_value=0.25 color=red
elif [ $i -ge 5 ]; then
  sc_value=0.2 color=orange
else
  sc_value=0.1 color=yellow
fi
awk 'NR%25==0 { FS = "|" ; print $4, $3}' seismic_c_am.txt |
psxy $rgn $proj -Sc${sc_value}c -G$color -O -K >> $psfile

最新更新