いくつかの繰り返し部分を含む非常に長いXMLファイルがあります。文字列Aに最も近い文字列Bが表示される行番号を探したいです。多くのインスタンスがあるとしましょう。
<section>
...
<entry>
<key>key-im-looking-for</key>
...
</entry>
...
<type>org.apache.whatever.package</type>
...
</section>
以下を含む行番号を見つけたいと思います。
key-im-looking-for
<type>org.apache.whatever.package</type>
grep、awk、またはsedを使用して、検索語に最も近い(または同じセクションに含まれる)検索語を見つけます。
ベストアンサー1
まず、XMLで行番号を見つけるのが少し奇妙であることがわかりました。 XMLは空白が関係のないツリー構造なので、行番号も関係ありません。これが正しいかどうか疑問に思います。XYの問題。
第二に、行番号の問題を無視する場合は、通常、適切なXMLパーサーまたはXPATHクエリを実行できるものを使用することをお勧めします。 XMLに関しては、あなたの質問は「X型ノードのキーは何ですか?」に近いです。これはXMLで作業する際の妥当でよく定義された質問です。
つまり、「最も近い」が常に最初に<key>
出ている場合は、<type>
awkでこのアルゴリズムを検討できます。
- 行が一致する場合は、
<key>key-im-looking-for<
行番号を記録します。 - 行が一致した場合は
<type>org.apache.whatever.package<
処理を停止します。 - 最後に印刷されたレコードの行番号
このような:
awk '/<key>key-im-looking-for</ { line=NR }
/<type>org.apache.whatever.package</ { exit }
END { print line }' input.xml