對於日誌進行分割的N種方法

2021-08-13 19:40:38 字數 2389 閱讀 1772

前言:

**乙個主要網域名稱的日誌包,解壓縮之後有10多個g,當日誌分析系統處理此日誌包時,需要的分析時間過長,而且如分析過程中出錯,要清空資料後再分析,所以需要將日誌進行分割成多個日誌包,通過多個日誌分析系統併發分析,本文主要記錄一下我測試的分割過程。

說明:方法1:(split分割)

語法:split  [-《行數》][-b 《位元組》][-c 《位元組》][-l 《行數》][要切割的檔案][輸出檔名]

# gunzip log.txt.gz //一定要先解壓,否則分割的檔案是不能cat/zcat顯示; 

# wc -l log.txt //計算乙個檔案的總行數; 

208363 log.txt 

# split -l 120000 log.txt newlog    //通過指定行數,將日誌分割成兩個檔案; 

# du -sh * 

50m     log.txt 

29m     newlogaa 

22m     newlogab 

# file * //分割後的檔案與原檔案屬性一樣 

log.txt:  ascii text, with very long lines, with crlf line terminators 

newlogaa: ascii text, with very long lines, with crlf line terminators 

newlogab: ascii text, with very long lines, with crlf line terminators 

# gzip newlogaa newlogab //將分割後的檔案進行壓縮,以便傳輸

另一種方法,通過大小分割(# split -c 26000000 log.txt newlog),-c(大c)是按大小分,並盡量保持按行,-c(小c)就可能分將一行分到不同檔案中。測試-c(大c)沒有問題,相對-l(按行)來說,統計乙個大檔案的位元組要比統計行數要快得多。用-c(大c)還是-l,請按實際情況而定。

方法2:(dd分割)

# gunzip log.txt.gz //一定要先解壓,否則分割的檔案是不能cat/zcat顯示; 

# dd bs=20480 count=1500  if=log.txt of=newlogaa //按大小分第乙個檔案 

# dd bs=20480 count=1500  if=log.txt of=newlogab skip=1500 //將大小之後的生成另乙個檔案 

# file * 

log.txt:  ascii text, with very long lines, with crlf line terminators 

newlogaa: ascii text, with very long lines, with crlf line terminators 

newlogab: ascii text, with very long lines, with crlf line terminators

分割沒問題,但會出現同一行分到不同檔案的情況,除非你以及日誌分析系統可以「容忍」。

方法3:(head+tail 分割)

#gzip log.txt.gz //如不解壓縮,下面請用zcat。 

# wc -l log.txt //統計乙個行數 

208363 log.txt 

# head -n `echo $((208363/2+1))` log.txt > newloga.txt //前x行重定向輸出到乙個檔案中; 

# tail –n `echo $((208363-208362/2-1))` log.txt >newlogb.txt //後x行重定向輸出到乙個檔案中; 

# gzip newloga.txt newlogb.txt //將兩個檔案進行壓縮

方法4:(awk分割)

#gzip log.txt.gz 

#awk 『』 log.txt >newloga.txt 

#awk 『』 log.txt >newlogb.txt

以上兩個命令,都要遍歷整個檔案,所以考慮到效率,應使用合併成: 

# awk 『』 log.txt

總結:以上四種方法,除了dd之外的三種方式都可以很好的整行分割日誌檔案。進行分割時,應考慮在讀一次檔案的同時完成,如不然,按下面的方式分割: 

cat log.txt| head –12000 >newloga.txt 

cat log.txt | tail –23000  >newlogb.txt 

如用此方法分割檔案的後一部分,那麼執行第二行命令檔案時,前x行是白白讀一遍的,執行的效率將很差,如檔案過大,還可能出現記憶體不夠的情況。

對於大日誌分割的幾種方法

ls lrth test.log rw r r 1 root root 645m 5月 30 20 42 test.log wc l test.log 8856340 test.log含義 b分割後的文件大小,單位是byte c分割後的文件,單行最大byte數 d使用數字作為字尾,同時使用 a le...

三種方法進行分水嶺分割

clear,clc 三種方法進行分水嶺分割 讀入影象 filename sar1.bmp f imread filename info imfinfo filename if info.bitdepth 8 f rgb2gray f endfigure,mesh double f 顯示影象,類似集水...

退出迴圈的n種方法

退出迴圈的n種方法,你能想出幾種?1 增加變數,作為退出條件 bool dobreak false for dobreak 2 使用goto for for outer 3 使用return void do lots of work void 4 巢狀if語句 bool isterminated f...