最近のコメント

    複数行にまたがる値を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.