2016-04-11 10 views
0

XML値の先頭と末尾のスペースを数える最善の方法は何ですか?具体的には、私はこのXMLを持っている場合:awkを使ってxmlの先頭と末尾の空白を数える方法はありますか?

<?xml version="1.0" encoding="UTF-8"?> 
<dvm name="Filename" xml="http://www.google.it"> 
    <description>AL</description> 
    <columns> 
    <column>abcde</column> 
    <column>fg</column> 
    </columns> 
    <rows> 
    <row> 
     <cell id="1"> 08 4  </cell> 
     <cell id="2">AG</cell> 
    </row> 
    <row> 
     <cell id="1"> 00 6  </cell> 
     <cell id="2"> AL </cell> 
    </row> 
    <row> 
     <cell id="1">0 42 </cell> 
     <cell id="2">AN </cell> 
    </row> 
    </rows> 
</dvm> 

にはどうすればおよび/または最後の文字/数字とXML終了タグ値の間「>」の間に空白を先頭と末尾のカウントおよび文字/数字が最初に発生することができますawkコマンドで?先行ブランクの合計と後続ブランクの合計を知り、それらを2つの変数に入れる必要があります。前もって感謝します。

出力は次のようになります。8

末尾:大手

答えて

1

を私が始める前に、私はこのアプローチは非常に脆いあるとしましょう。たとえあなたのXMLがあなたの私たちの見方と異なっていても、タグの1つに改行などの特定の文字が含まれていても、XMLは失敗します。 XMLを使って作業する場合、awkは仕事のための適切なツールではありません。

awk -F'[<>]' '$2 ~ /^cell/ { 
    if (match($3, /^ +/)) leading += RLENGTH 
    if (match($3,/+$/)) trailing += RLENGTH 
} END { print "leading: " leading+0, "trailing: " trailing+0 }' file 

<または>、そう<cell>タグの内容のいずれかにフィールドの区切りを設定します。あなたは、あなたがこのようなものを使用して示されてきた入力に必要な値を得ることができ、言っ

その行の3番目のフィールドです。 matchを使用して、タグの内容の開始/終了時のスペースを確認してください。 RLENGTHは、一致する文字列の長さに設定される特別な変数です。

+0

お返事ありがとうございます。 あなたのコードでは、出力は leading:trailing:4 – ciaccaro

+0

タブ文字ですか?空白文字の代わりにそれぞれのパターンで '[[:space:]]'を使うことで、それらを単一スペースとして扱うのは簡単でしょう。 –

+0

タブではなく空白です – ciaccaro

関連する問題