分割檔案和資料 linux

2022-09-06 13:06:20 字數 3422 閱讀 7941

在某些情況下,必須把檔案分割成多個更小的片段。如今我們分割檔案的目的比如:提高可讀性、生成日誌、通過email傳送檔案等等。

假設我們有乙個erro.log的測試檔案,其大小為14m。你可以將該檔案分割成多檔案,例如:

[root@gameserver1 file]# split -b 5m erro.log    #-b 大小選項

[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

上面的命令將erro.log檔案分割成多個檔案,以每個檔案5m的大小分割。這些檔案以xaa、xab、xac的形式命名。這表明他們都有乙個字母字尾。如果想以數字為字尾,可以另外使用-d引數。此外,使用-a 可以指定字尾的長度:

[root@gameserver1 file]# split -b 5m erro.log -d -a 4                   #-d以數字為字尾  -a 4 表示字尾為4位

[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

除了m(mb)字尾,我們還可以使用g(gb)、c(byte)、w(word)、k(kb)等字尾。

剛剛說了為分割的檔名指定了字尾,那麼也可以給分割的檔名指定字首。之前分割的檔名字首都有乙個x,我們可以通過提供乙個字首名來使用自己的檔名字首,例如:

[root@gameserver1 file]# split -b 5m erro.log -d -a 5 erro_log        #erro_log 指定的切割後的檔案字首

[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

如果不想按照資料塊大小,而是需要根據行數來分割檔案的話,可以使用: -l 行數 的格式來進行分割:

[root@gameserver1 file]# split -l 99999 erro.log     #按照每個檔案99999行來進行分割

[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。他能夠根據指定的條件和字串匹配選項對日誌檔案分割。來看看這個工具是如何運作的。

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按每塊...