在一个小bash脚本中,我只是尝试修剪GPS输入数据,以便在单独的变量中具有经度和纬度值:
echo $geo_data
GPS_latitude=$( echo $geo_data | awk -F"+|-" '{print substr($0,index($0,$2-1),1) $2}' )
GPS_longitude=$( echo $geo_data | awk -F"+|-" '{print substr($0,index($0,$3-1),1) $3}' )
echo $GPS_latitude
echo $GPS_longitude
但是我得到的结果似乎混淆了每个组件前面的+/-符号:
-04.7367+055.5230
-04.7367
-055.5230
我以为index()参数将完全避免这种情况,但是显然我做错了。您有解决方法的想法吗?
非常感谢
DaC
您可以使用sed
提取这些值:
geo_data='-04.7367+055.5230'
GPS_latitude=$(sed 's/\(.*\)[-+].*/\1/' <<< "$geo_data")
GPS_longitude=$(sed 's/.*\([-+].*\)/\1/' <<< "$geo_data")
echo "GPS Latitude: ${GPS_latitude} and GPS longitude: ${GPS_longitude}"
# => GPS Latitude: -04.7367 and GPS longitude: +055.5230
请参见online demo
纬度模式为\(.*\)[-+].*
,它会将直到最后一个+
或-
的所有字符捕获到组1中,然后匹配其余字符。比赛将替换为第1组的内容,因此所有内容都位于最后一个+
或-
之前。
POSIX BRE正则表达式详细信息
\(
-捕获组#1的开始(\1
从替换模式中引用此值).*
-任何0个或更多字符\)
-捕获组的结尾[-+]
-与-
或+
匹配的括号表达式>.*
--任意0个或多个字符。GPS_longitude
模式是相同的,但捕获最后一个-
或+
之后的所有字符,包括加号或连字符。
您需要从1
的输出中减去index
,而不是字段值