2016-04-26 50 views
1

我有一个kml文件(简短示例,下面是真实的文件,数百行更大),并带有浮点数和字符串。我想仅使用SED或AWK命令(例如,在小数点后4位数字)更改浮点数的精度,而不触及文件本身的结构和其余字符串。我尝试过awk,grep和sed,但最终只选择了数字。有人可以帮助我完成这项任务吗?如何在不改变结构的情况下通过sed命令更改KML文件中的浮点精度

 <Placemark> 
       <name>Line 276</name> 
       <styleUrl>#st-9324-0</styleUrl> 
       <LineString> 
        <tessellate>1</tessellate> 
        <coordinates> 
         -82.0843550361,-10.3436718895,0 
         -82.0733687247,-10.3414798573,0 
         -82.067875569,-10.3436762828,0 
         -82.0623824134,-10.3464215529,0 
         -82.051396102,-10.354657111,0 
         -82.0513917085,-10.3546626018,0 
         -82.0470007396,-10.3656489207,0 
         -82.0470007396,-10.3766352397,0 
         -82.0491996781,-10.3876215586,0 
         -82.051396102,-10.3912813368,0 
         -82.0568892577,-10.3986078776,0 
         -82.0623824134,-10.4030032431,0 
         -82.0706234567,-10.4095941965,0 
         -82.0733687247,-10.4114246674,0 
         -82.0843550361,-10.4169172451,0 
         -82.0953303765,-10.4205805155,0 
         -82.0953413474,-10.4205832616,0 
         -82.1063276588,-10.4219531504,0 
         -82.1173139701,-10.4219531504,0 
         -82.1209737457,-10.4205805155,0 
         -82.1283002815,-10.41618515,0 
         -82.1337934371,-10.4095941965,0 
         -82.1345777463,-10.3986078776,0 
         -82.1324208031,-10.3876215586,0 
         -82.1283002815,-10.3793805097,0 
         -82.1261038575,-10.3766352397,0 
         -82.1173139701,-10.3678453462,0 
         -82.1151175462,-10.3656489207,0 
         -82.1063276588,-10.3583258722,0 
         -82.1008345031,-10.3546626018,0 
         -82.0953413474,-10.3502672363,0 
         -82.0843623548,-10.3436762828,0 
         -82.0843550361,-10.3436718895,0 
        </coordinates> 
       </LineString> 
      </Placemark>      
        <Placemark> 
          <name>12</name> 
          <styleUrl>#st-9325-0</styleUrl> 
          <Point> 
            <coordinates> 
            -80.881497121,-43.7490060037,0 
            </coordinates> 
          </Point> 
        </Placemark> 

谢谢。

JB

+0

为什么? [**你最终想要完成什么?**](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) – amphetamachine

+0

要减小文件的大小...将浮点数的精度更改为点后4位数,并清除所有制表符(sed -ri s /“\ tab”/“”/ g文件),kml文件最初为2.2 MB,现在已经得到800 kb 。为了我的目的,一个4位数的地理位置已经绰绰有余了。 – Quim

回答

4

我将使用以下sed命令:

s/([0-9]+\.[0-9]{4})[0-9]+/\1/g 

它匹配:

  • 为第一组:
    • 尽可能多的数字尽可能
    • 一个字面点
    • 四个数字
  • 组外:
    • 许多其它数字尽可能

然后它取代了整个匹配与所述第一组中,截断额外数字。

随着GNU sed的,使用-i编辑“就地”的文件,并-r,以避免逃避括号和+sed -ri 's/([0-9]+\.[0-9]{4})[0-9]+/\1/g' file

编辑:其实我们并不需要匹配符号

+0

哇。这真的很快。非常感谢。!我在sed里面用regexp搞砸了自己。现在我看到它的力量。 – Quim

+0

小心,我在那里错误地添加了一个“\”(在第一个'[0-9]'类之前) – Aaron

+0

实现并纠正它。被接受为正确答案。再次感谢,真的。 – Quim

相关问题