用awk修剪GPS信息

问题描述 投票:1回答:2

在一个小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

linux bash shell awk gps
2个回答
0
投票

您可以使用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模式是相同的,但捕获最后一个-+之后的所有字符,包括加号或连字符。


0
投票

您需要从1的输出中减去index,而不是字段值

© www.soinside.com 2019 - 2024. All rights reserved.