2016-07-29 9 views
-1

バイナリとxmlデータが混在した巨大なファイルがあります。ファイル内に複数の出現がある2つのXMLタグ間のすべての値を抽出したいと思います。パターンは次のようになります:<C99><F1>050</F1><F2>random value</F2></C99>。 XMLデータの一部はフォーマットされておらず、すべてが1行に収められています。2つの既知の文字列の間で値を抽出する方法

I値が範囲050および999(<F1>が同様に他のフィールドの下に存在するが、私はC99からF1の値のみを必要とする)の間である<C99>から<F1></F1>間のすべての値を必要とします。私はそれらを数えて、F1が050から999の間にあるC99の数を調べる必要があります。

私はどのように簡単にその値に達することができますか(catとgrep?またはsed?を使用して)値をファイルにエクスポートすると、並べ替えとカウントが簡単に実行できます。

私の一時的な解決策:<C99><F1>.

で始まる

cat filename | grep -o "<C99><F1>......." > file.txt 

これは、すべての文字列から最初の12個の文字をエクスポートします:

ファイルからすべてのバイナリデータを除去した後、私は次のコマンドを実行することができます

<C99><F1>001 
<C99><F1>056 
<C99><F1>123 
<C99><F1>445 

.....

テキストファイルにエクスポートした後、私は<C99><F1>を何も置き換えずに残りの値をソートしてカウントします。

ありがとうございました! XMLStarletを使用して

+0

これはおそらくあまりにも多くのdownvotesをもたらします。あなた自身の問題を解決するための努力と試行を少なくとも表示しない限り –

+0

XMLParserを使用してください –

+0

私はそうではないバイナリ形式のデータとにかくそれが必要です。 – spiderpc

答えて

2

$ xml sel -t -v '//C99/F1[. >= 50 and . <= 999]' -nl data.xml | wc -l 

がヒントのあまり、申し訳ありません。

+0

非常に素晴らしいツール、それを知らなかった –

関連する問題