2013-02-16 92 views
0

其實我有一個XML文件。下面是文件的內容。在awk中按固定寬度拆分行

<charge_amt>1.90</charge_amt> 

<charge_amt>-89</charge_amt> 

我想分開費用(1.90)並檢查它是否爲負值。如果非負,以0

輸出更換費用:

<charge_amt>0</charge_amt> 

<charge_amt>-89</charge_amt> 

請幫我在這。

+0

所以,你用'awk'編輯XML?看起來並不特別健壯。這與固定寬度有什麼關係?爲什麼你必須使用'awk'? – nneonneo 2013-02-16 07:46:42

+0

我們可以用其他方法做到這一點嗎?其實文件太大,這就是爲什麼我試圖用awk – 2013-02-16 07:51:40

回答

0

嘗試sed

sed -e '[email protected]<charge_amt>[^-][^<]*</charge_amt>@<charge_amt>0</charge_amt>@g' <file> newfile 

請注意,這不會起到很好,如果你在文本中有空格,則charge_amt節點,或任何其他有趣的企業,在屬性。所以要非常小心,在出現問題時首先使用真正的XML解析器。

+0

謝謝nneonneo!你能否描述「@」和「[^ - ] [^ <] *」的含義。你爲什麼使用它? – 2013-02-16 08:30:40

+0

'@'只是分隔正則表達式各部分的分隔符。 '[^ - ]'表示「任何東西,但 - 字符」。 '[^ <] *'表示「除了<」以外的任何字符序列。 – nneonneo 2013-02-16 16:56:25