我有一個大的900MB xml文件,整個文件只有一行。標籤之間沒有換行符。我需要計算該文件中特定標記的出現次數。計算大文件中字符串的出現次數
我試圖
grep -o '<start tag>' filename | wc -l
我得到一個grep: line too long
錯誤。
我該如何解決這個問題?
我有一個大的900MB xml文件,整個文件只有一行。標籤之間沒有換行符。我需要計算該文件中特定標記的出現次數。計算大文件中字符串的出現次數
我試圖
grep -o '<start tag>' filename | wc -l
我得到一個grep: line too long
錯誤。
我該如何解決這個問題?
這裏是一個黑客攻擊的一位:
perl -ne 'BEGIN { $/ = ">"; $c = 0 } $c++ if /<start tag>/; END { print "$c\n" }' filename
的想法是遍歷由>
,而不是\n
(新行)終止「線」。這應該避免「線太長」的錯誤。
那不還是先讀一行?我不知道如何測試... – Kusalananda
@Kusalananda不,BEGIN塊首先運行(實際上是在解析時間)。 – melpomene
只需使用AWK:
awk -F'<start tag>' '{print NF-1}' file
如果失敗,你可以用GNU AWK(多焦RS)做到這一點:
awk -v RS='<start tag>' 'END{print NR-1}' file
'sed' ....... ..? –
試過sed's// \ n/g'test.log | grep -c「」。但是這又一次,當我做grep它適用於小文件,但在我的情況下,grep給出了太長的錯誤 –
md1980
@ md1980它是'grep'或'sed',在那種情況下(你最後的評論)給出了錯誤。 – Kusalananda