“整数表达式预期”bash if语句

时间:2014-11-11 15:20:26

标签: bash shell awk integer expression

我试图从文件" seismic_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行可能? (见上文)

1 个答案:

答案 0 :(得分:2)

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
相关问题