1. 程式人生 > >【shell】資料檔案分割

【shell】資料檔案分割

有時候我們必須把資料檔案分割為更小的檔案,這樣方便我們郵件傳送或者檢視檔案內容。split命令則可以用來分割檔案。

一、根據大小來分割檔案


1.一般分割

例如:現在有檔案tmp.log,大小為:3680k,我們以1000k為單位分割該檔案,在split命令中,除了k(KB),我們還可以使用M(MB)、G(GB)、c(byte)、w(word)

Linux:/qinys/data # split -b 1000k tmp.log

image


2.分割時指定字尾

在分割時,預設使用字母后綴,我們可以給檔名指定數字字尾,使用-d選項,此外,-a length可以指定字尾長度:

Linux:/qinys/data # split -b 1000k tmp.log -d -a 2

image

3.分割時候指定字首

我們分割檔案的時候為了區分那些是原始檔案,哪些是分割後的檔案,我們使用字首來區分,以下在分割後的檔名之前新增fg_

Linux:/qinys/data # split -b 1000k tmp.log -d -a 2 fg_

image

二、根據行數來分割


現在存在資料檔案tmp.log,資料總記錄數為:31346

以下是根據檔案記錄數來拆分檔案,以10000條記錄為單位進行拆分

Linux:/qinys/data # split -l 10000 tmp.log -d -a 2 row_

image


三、根據內容拆分


現在存在檔案tmp1.log,檔案內容如下所示:

image

我們現在想把每個ping的結果分別儲存到各個檔案,以便檢視;

命令如下:

Linux:/qinys/data # csplit tmp1.log /ping/ -n 2 -s {*} -f ping -b "%02d.log"

執行結果如下:

image

命令解釋:

  • /ping/ 用來匹配特定的行,分割從此處開始;它從當前行(第一行)一直複製到(但不包括)包含ping的行
  • {*} 表示匹配重複執行分割操作,直到檔案末尾為止。可以使用{整數}的形式來指定分割的次數
  • -s 是命令進入靜默模式,不列印其他資訊
  • -n 指定分割後的檔名的數字個數,例如:01,02,03等
  • -f 指定分割後的檔名字首
  • -b 指定字尾格式,%02d.log表示長度為2位,不足的使用0代替。例如:01,02,03等;可以參照c語言printf引數格式