CSVファイルの情報に基づいてSVGファイルを変更する

CSVファイルの情報に基づいてSVGファイルを変更する

色を追加したいアメリカ地図のSVGファイルがあります。時間がかかるので、bashスクリプトが使えると思いました。ステータスとそのステータスに属する色を含む他のファイルがあります。

SVGファイル:

<g id="hi">
    <title>Hawaii</title>
    <path class="state hi" d="m 233.08751,519.30948 ... z" id="HI" />
</g>

CSVファイル

HI, blue

私が望むもの:

<g id="hi" style="fill:blue;">
        <title>Hawaii</title>
        <path class="state hi" d="m 233.08751,519.30948 ... z" id="HI" />
    </g>

greporを使うことができると思いましたが、sedどこから始めるべきかわかりません。

ベストアンサー1

bashとGNU sedの使用:

while IFS=",$IFS" read id color
do
    sed -i "s/g id=\"${id,,}\"/& style=\"fill:$color;\"/g" file.svg
done <file.csv

完了すると、file.svgは次のようになります。

<g id="hi" style="fill:blue;">
    <title>Hawaii</title>
    <path class="state hi" d="m 233.08751,519.30948 ... z" id="HI" />
</g>

どのように動作しますか?

  • while IFS=",$IFS" read id color; do

    while変数sumを読み込んでidループを開始しますcolorIFS入力がコンマとスペースで区切られるようにコンマを追加します。

  • sed -i "s/g id=\"${id,,}\"/& style=\"fill:$color;\"/g" file.svg

    これにより、file.svgの内部更新が行われます。idbash:を使用して小文字に変換されます${id,,}。その文字g id="${id,,}"列を見つけますg id="${id,,} style="fill:$color;"

    注:$id$colorsed コマンドに直接置き換えられます。あなたはこれをしなければなりません。〜しない限りfile.csv ファイルのソースを信頼します。

  • done <file.csv

    これでwhileループが終了し、ループから読み取るように指示しますfile.csv

BSD(OSX)

BSDシステムを使用している場合は、sedコマンドを少し変更する必要があります。

while IFS=",$IFS" read id color
do
    sed -i "" "s/g id=\"${id,,}\"/& style=\"fill:$color;\"/g" file.svg
done <file.csv

おすすめ記事