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