2016-04-26 4 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ファイル)を消去すると、元々2.2 MBだったkmlファイルは800 kb 。私の目的のために、4桁の地理的位置は十分です。 – Quim

答えて

4
私は、次のsedコマンドを使用します

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

それは一致します

  • を最初のグループに:可能
  • として
    • など、多くの桁数を
    • リテラルドット
    • 群の4桁以上
  • 外:可能

として

  • 他の多くの桁次に切り捨て、最初のグループとマッチ全体を置き換え余分な数字。 GNUで

    は括弧と+を脱出することを避けるために、「インプレース」ファイルを編集する-iを使用して-r、sedを:sed -ri 's/([0-9]+\.[0-9]{4})[0-9]+/\1/g' file

    編集:実際に私たちは看板

+0

うわー。これは本当に速かった!どうもありがとう。!私はsedの中で正規表現で自分自身を台無しにしていた。今私はそれの力を見ます。 – Quim

+0

慎重に、最初の '[0-9]'クラスの前に余分な "\"をタイプしました – Aaron

+0

それを実現して修正してください。正しい答えとして受け入れられる!もう一度、本当にありがとう。 – Quim

関連する問題