Text-Processing

從輸入文件中讀取數據並將數據放在 xml 中的適當欄位中

  • May 29, 2017

我有一個輸入文件和一個 xml 文件。

輸入文件-

/user/sht
227_89,45_99
/user/sht1
230_90
/user/sht2
441_50

該文件具有包含路徑和位置的交替行。

xml文件——

<aaa><command name="move">
<domain>
<path></path>
<positions></positions>
</domain>
<domain>
<path></path>
<positions></positions>
</domain>
<domain>
<path></path>
<positions></positions>
</domain>
</command>
</aaa>

我需要編寫一個腳本來提供以下所需的輸出 xml,然後使用以下 xml 作為輸入執行一些命令-

<aaa><command name="move">
<domain>
<path>/user/sht</path>
<positions>227_89,45_99</positions>
</domain>
<domain>
<path>/user/sht1</path>
<positions>230_90</positions>
</domain>
<domain>
<path>/user/sht2</path>
<positions>441_50</positions>
</domain>
</command>
</aaa>

我嘗試從輸入文件中逐行提取並將其放在 xml 中,但問題是每次出現的<path>都被第一個輸入行替換。

使用 GNU bash 4.1.2。

使用單個 GNUsed腳本,您可以執行類似的操作

sed -n '/<aaa>/,/<.aaa>/!{H;d}
G;:a
s_>\(</path>.*\n\)\n\([^\n]*\)_>\2\1_
s_>\(</positions>.*\n\)\n\([^\n]*\)_>\2\1_;
ta;P;s/.*\n\n/\n/;h' input.txt input.xml

第一行收集了保持緩衝區中第一個文件的所有行。

然後對於第二個文件的每一行,保留緩衝區都附加有G. 如果它是一個pathpositions保持緩衝區的第一段,則使用兩個s命令之一將其移動到標籤內。

在任何情況下,該行都會被列印 ( P) 並被移除 ( s/.*\n\n/\n/),並且替換列表的剩餘部分會被移回保留緩衝區以供下一個循環 ( h) 使用。

引用自:https://unix.stackexchange.com/questions/367904