複数行にまたがる値をGrepして抽出する

 

以下のXMLのように、路線名と鉄道会社名の両方を抽出したい場合、grep コマンドの複数行取得を用いると便利です。「grep -n」のように、nに数値を指定すると前後n行を取得してくれる為、その後 pasteコマンドにて結合し、grepコマンドが出力するセパレータの–(ハイフン2つ)をsedで置換し改行とすることで、複数行を1行にマージできます。あとは、sedなりawkなりで必要な部分を抽出したり、sort | uniq コマンドで重複除去したりします。

cat sample.xml | grep -1 operationCompany | paste -s | sed -e ‘s/\-\-/\n/g’ | sed -e ‘s/\r/|\n/g’

 

以下、sample.xml

 

<ksj:RailroadSection gml:id=”eb02_4228″>
<ksj:location xlink:href=”#cv_rss4228″/>
<ksj:railwayType>21</ksj:railwayType>
<ksj:serviceProviderType>4</ksj:serviceProviderType>
<ksj:railwayLineName>江波線</ksj:railwayLineName>
<ksj:operationCompany>広島電鉄</ksj:operationCompany>
<ksj:station xlink:href=”#eb03_2083″/>
</ksj:RailroadSection>
<ksj:RailroadSection gml:id=”eb02_4229″>
<ksj:location xlink:href=”#cv_rss4229″/>
<ksj:railwayType>21</ksj:railwayType>
<ksj:serviceProviderType>4</ksj:serviceProviderType>
<ksj:railwayLineName>白島線</ksj:railwayLineName>
<ksj:operationCompany>広島電鉄</ksj:operationCompany>
<ksj:station xlink:href=”#eb03_2079″/>
</ksj:RailroadSection>

Comments are closed.