我正在嘗試將一個大的xml文件拆分爲多個文件,並在AWK腳本中使用了以下代碼。Shell腳本 - 將xml拆分爲多個文件
/<fileItem>/ {
rfile="fileItem" count ".xml"
print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" > rfile
print $0 > rfile
getline
while ($0 !~ "<\/fileItem>") {
print > rfile
getline
}
print $0 > rfile
close(rfile)
count++
}
上面的代碼生成的XML文件,其名稱改爲「fileItem_1」,「fileItem_2」,「fileItem3」列表等
不過,我想文件名類似於「 item_XXXXX」,其中XXXXX是XML中的一個節點 - 描述如下
<fileItem>
<id>12345</id>
<name>XXXXX</name>
</fileItem>
所以,基本上我想要的‘ID’節點是文件名。 任何人都可以請幫助我嗎?
聽起來像你應該真的使用適當的XML工具。如果你的輸入是完全正常的,那麼使用Awk一次將一條記錄讀入內存,並在達到它的結束標記(或文件末尾,儘管違反了XML)時將其刷新到磁盤,可能會讓你做你想做的事。簡而言之,當您看到開始標籤時將變量設置爲1,然後在變量爲true時將行累加到另一個變量中;最後,當你看到結束標籤時,寫出累計行並將變量設置回0.這是一種非常標準的Awk技術,因此示例不應該很難找到 – tripleee
如果您曾經考慮過使用getline腳本,然後確保你先閱讀並完全理解http://awk.freeshell.org/AllAboutGetline,這樣你就知道你正在進入什麼。 –
對於將來的讀者,一般解決方案比'awk'命令複雜得多......使用XML工具,使用XML庫的高級語言,使用結果文檔的XSLT V2.0等。 –