Shell脚本将度数转换为基本方向

问题描述

是否可以将以下python函数移植到基于ash的shell脚本中?

#def degrees_to_cardinal(d):
        #dirs = ["N","NNE","NE","ENE","E","ESE","SE","SSE",#"S","SSW","SW","WSW","W","WNW","NW","NNW"]
       # ix = int((d + 11.25)/22.5)
        #return dirs[ix % 16]

基本上,我需要将对应一个方向(0-360度)的值转换为其对应的16点主方向。度->基本方向。

我可以使用一系列的if elif elif ...,但这看起来笨拙且效率低下。

解决方法

必须说bash没有处理浮点数的真正方法。

当然,要解决此问题,您可以将360乘以5或10,然后修改 相应地脚本的其余部分。

,

这可能满足您的需求:

D=N..NNENE.ENEE..ESESE.SSES..SSWSW.WSWW..WNWNW.NNW
d=$((d*2))
n=${D:$(((d/45)*3)):3}
echo ${n//.*}

其中“ d”是度值

,
cat degs2dir
#!/bin/ash

awk -v deg="$1" '
  BEGIN {
    dirs[1]="N"  ; dirs[2]="NNE" ; dirs[3]="NE" ; dirs[4]="ENE"
    dirs[5]= "E" ; dirs[6]="ESE" ; dirs[7]="SE" ; dirs[8]="SSE"
    dirs[9]="S"  ; dirs[10]="SSW"; dirs[11]="SW"; dirs[12]="WSW"
    dirs[13]="W" ; dirs[14]="WNW"; dirs[15]="NW"; dirs[16]="NNW"
   }
  END {
     ix = int((deg + 11.25)/22.5)
     print dirs[ix]
}' /dev/null

chmod 755 degs2dir
degs2dir 237

#output
SW

IHTH