名前と値のペアのセットと XML ファイルを入力として受け取るシェル スクリプトを作成しようとしています。
その目的は、XML ファイル内で名前/値のペア ファイル (タグで区切られた) から「名前」文字列を検索し、XML ファイルの同じレベルで定義された「値」文字列 (タグで区切られた) を置き換えることです。
例えば
名前と値のペア ファイル
trousers=blue
hat=red
shoes=brown
入力 XML ファイル
<application>
<Pairs>
<Pair>
<name>trousers</name>
<value>black</value>
</Pair>
<IrritatingExtraLayer>
<Pair>
<name>hat</name>
<value>green</value>
</Pair>
</IrritatingExtraLayer>
<Pair>
<name>shirt</name>
<value>orange</value>
</Pair>
</Pairs>
</application>
期待される出力ファイル
<application>
<Pairs>
<Pair>
<name>trousers</name>
<value>blue</value>
</Pair>
<IrritatingExtraLayer>
<Pair>
<name>hat</name>
<value>red</value>
</Pair>
</IrritatingExtraLayer>
<Pair>
<name>shirt</name>
<value>orange</value>
</Pair>
</Pairs>
</application>
xmlstarlet を使用してこれを実行できるスクリプトを既に作成しましたが、非常に遅いです (私が作業しているファイルは数千行の長さです)。私のスクリプトの主なコード スニペット (前処理と後処理を無視) は次のとおりです。
for line in ${namevaluepairs}; do
name=$(echo ${line} | cut -d'=' -f1)
value=$(echo ${line} | cut -d'=' -f2)
outputxml=$(echo ${outputxml} | xmlstarlet ed -u "//Pair/[name='${name}']/value" -v "${value}" )
done
これを改善するにはどうすればよいですか?