2016-04-26 53 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

相關問題