问题描述
是否可以将以下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