2012-05-21 75 views
0

我有一個xml文件,其中包含標記內的數字。 例)Linux shell腳本 - 獲取字符串中的數字總和,但也保持該字符串與總數

<REC_CNT>25000</REC_CNT> 
<REC_CNT>25000</REC_CNT> 
<REC_CNT>25000</REC_CNT> 
<REC_CNT>11767</REC_CNT> 

我需要得到這些數字的總和,而在同一時間最終輸出必須仍然有它周圍的標籤。

<REC_CNT>86767</REC_CNT> 

我用AWK已經刪除標記,並添加數字,但不是我要找的。我正在做的是一個替換,如果我只得到該數字,那麼替換也會替換該文件中的所有其他數字,而不僅僅是REC_CNT ...任何輸入?

+1

需要看你的代碼。祝你好運。 – shellter

+0

殼牌,很簡單,這是錯誤的工具。你能解釋爲什麼你不想考慮其他語言(比如Perl或Python)嗎? –

+0

newcount ='cat $ pocfiles | grep''| awk'BEGIN {FS =「」} {print substr($ 2,0)}'| awk'BEGIN {FS =「<」} {print substr($ 1,0)}'| awk'{SUM + = $ 1} END {print SUM}' 我最終刪除了標籤,添加了數字,並將我的sed語句重新格式化爲只替換數字的第一個實例: sed -i「0,/$ oldcount/s // $ newcount /「 感謝您的幫助! – user1408683

回答

2

awk -v FPAT='([A-Z_]+)|([0-9]+)' '{ sum += $2; fname = $1 } END { print "<" fname ">" sum "</" fname ">" }'

這假設你的標籤是大寫字母或下劃線。根據需要調整正則表達式。

+0

謝謝你在這個答覆中的努力。我最終做的只是取出標籤,然後重新格式化我的sed,只更換我想要的特定實例。再次感謝。 – user1408683

0

您應該使用實際的XML處理器,而不是一些基於正則表達式的文本消除工具。