在某些情況下,必須把檔案分割成多個更小的片段。如今我們分割檔案的目的比如:提高可讀性、生成日誌、通過email傳送檔案等等。
假設我們有乙個erro.log的測試檔案,其大小為14m。你可以將該檔案分割成多檔案,例如:
[root@gameserver1 file]# split -b 5m erro.log #-b 大小選項上面的命令將erro.log檔案分割成多個檔案,以每個檔案5m的大小分割。這些檔案以xaa、xab、xac的形式命名。這表明他們都有乙個字母字尾。如果想以數字為字尾,可以另外使用-d引數。此外,使用-a 可以指定字尾的長度:[root@gameserver1 file]# ls
erro.log xaa xab xac
[root@gameserver1 file]# du -hs *
14m erro.log
5.0m xaa
5.0m xab
3.8m xac
[root@gameserver1 file]# split -b 5m erro.log -d -a 4 #-d以數字為字尾 -a 4 表示字尾為4位除了m(mb)字尾,我們還可以使用g(gb)、c(byte)、w(word)、k(kb)等字尾。[root@gameserver1 file]# ls
erro.log x0000 x0001 x0002
[root@gameserver1 file]# du -hs *
14m erro.log
5.0m x0000
5.0m x0001
3.8m x0002
剛剛說了為分割的檔名指定了字尾,那麼也可以給分割的檔名指定字首。之前分割的檔名字首都有乙個x,我們可以通過提供乙個字首名來使用自己的檔名字首,例如:
[root@gameserver1 file]# split -b 5m erro.log -d -a 5 erro_log #erro_log 指定的切割後的檔案字首如果不想按照資料塊大小,而是需要根據行數來分割檔案的話,可以使用: -l 行數 的格式來進行分割:[root@gameserver1 file]# ls
erro.log erro_log00000 erro_log00001 erro_log00002
[root@gameserver1 file]# du -hs *
14m erro.log
5.0m erro_log00000
5.0m erro_log00001
3.8m erro_log00002
[root@gameserver1 file]# split -l 99999 erro.log #按照每個檔案99999行來進行分割另外還有乙個工具是csplit。他能夠根據指定的條件和字串匹配選項對日誌檔案分割。來看看這個工具是如何運作的。[root@gameserver1 file]# ls
erro.log xaa xab xac
[root@gameserver1 file]# du -hs *
14m erro.log
6.7m xaa
6.7m xab
456k xac
csplit是split工具的乙個變體。split只能夠根據資料大小或行數進行分割檔案,而csplit可以根據文字自身的特點進行分割。是否存在某個單詞或文字內容都可以作為分割檔案的條件。例如我有乙個host.txt檔案:
我現在需要將這個檔案分割成server1.txt、server2.txt和server3.txt,這些檔案的內容分別取自原檔案host.txt中不同的server部分。那麼,可以使用下面的方法來實現:
[root@gameserver1 file]# csplit host.txt /server/ -n 2 -s -f server -b "%02d.txt" ; rm server00.txt有關命令的詳細說明:rm:是否刪除普通空檔案 "server00.txt"?y
[root@gameserver1 file]# ls
host.txt server01.txt server02.txt server03.txt
[root@gameserver1 file]# cat server01.txt
server-1
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.6
192.168.1.7
[root@gameserver1 file]# cat server02.txt
server-2
192.168.2.1
192.168.2.2
192.168.2.3
192.168.2.4
192.168.2.5
192.168.2.6
192.168.2.7
[root@gameserver1 file]# cat server03.txt
server-3
192.168.3.1
192.168.3.2
192.168.3.3
192.168.3.4
192.168.3.5
192.168.3.6
192.168.3.7
csplit host.txt /server/ -n 2 -s -f server -b "%02d.txt" ; rm server00.txt/server/ 用來匹配某一行,分割過程即從此處開始。
-n 指定分割後的檔名字尾的數字個數,例如:01、02、03等。
-s 使命令進入靜默模式,不列印其它資訊
表示根據匹配重複執行分割操作,直到檔案末尾為止。也可以用 的方式來指定分割執行的次數。
-f 指定分割後的檔名的字首(在上面的例子中server就是字首)。
-b 指定字尾格式。例如%02d.txt,類似於c語言中printf的引數格式。在這裡 檔名 = 字首 + 字尾 = server + %02d.txt。
因為分割後的第乙個檔案沒有內容(匹配的單詞就位於檔案的第一行中),所以我們刪除了server00.txt。
綜上所述:
split,可以根據資料大小和行數來進行分割
csplit,可以根據文字自身的特點進行分割
linux 分割大檔案
你曾經是否想要把乙個大檔案分割成多個小檔案?比如乙個5gb日誌檔案,我們需要把它分成多個小檔案,這樣我們才有可能使用普通的文字編輯器讀取它。有時我們需要傳輸20gb的大檔案到另一台伺服器,這就需要我們把它分割成多個檔案,這樣便於傳輸資料。下面我們來通過五個例項來講解它。split命令分割檔案成每個檔...
LInux 分割合併檔案
有兩種方式,第一種使用dd命令 第二種使用split dd命令是linux下乙個非常有用的磁碟命令。它可以將指定大小的塊拷貝成乙個檔案,並在拷貝的同時執行指定的轉換。unix已經提供了檔案切割功能,能完成這個功能的unix命令就是dd。要切割的大檔案為dgjd,共98336321位元組,則 dd i...
Linux下分割合併檔案
切割合併檔案在linux下用split和cat就可以完成。下面舉些例項進行說明。1.檔案切割 檔案切割模式分為兩種 文字檔案 二進位制模式。1.1文字模式 按最大檔案大小切割 按文字行數切割。1.1.1最大檔案大小切割 split c 5k duanxin split 將文字檔案duanxin按每塊...