UNIX - csplit 指令

【功能】

將檔案分割成數個小檔案

【語法】

csplit [-s] [-k] [-f prefix] file arg1 [...argn ]

【說明】

csplit 指令可將一個大的檔案分割成若干個較小的檔。分割的數目可由使用者指定,分割的位置是含有arg1...argn 等字串的行為界,依此分割成 n +1 個檔。這些較小的檔案名稱預設為 xx00...xx99,最多可分為 100個檔案,以方便使用者處理。

細詳的分割處理如下:

xx00 從檔案file 的最前端到含有 arg1 的行為止
(不包含 arg1 所在的行)。
xx01 從檔案file 中含 arg1 的行開始到含有arg2 的行為
止(不包含 arg2 所在的行)。
.
.
.
.
.
. 其餘依此類推。
xx98
xx99

在此指令執行完會印出分割後每個檔案的大小,原來的檔案 file 仍會存在,csplit 指令不會主動去刪除。

由 csplit 指令所分割的檔可使用 cat指令將之合併,恢復成原來的檔案。

引數 arg1...argn 可由下面形式所組成。

/rexp/ 以含有 rexp 為分隔點,建立的檔案從上一次的處理位置到含有 rexp 的行為止(不包含該行)。新的處理位置變成含有 rexp 的行,且在下一個建立的檔案中才會包含進來,成為第一行。在指定分隔點時可配合使用 +n、-n 分別表示往下(往檔案尾端)或往上(往檔案前端)若干行為分隔點,例如:/lesson/-2 表示以 lesson 所在的行往上 2 行才是分隔點(使用 +n、-n 時不可有任何空白介於/rexp/ 之間)。
% rexp % 功能與 /rexp/ 幾乎相同,但不會建立檔案。適用於跳過某一段資料不予處理時。
lnno 建立的檔案是從上次處理的位置到 file 中的第 lnno行為止(不包含第 lnno 行),而新的處理位置變成第 lnno 行。
{ num }

重複的次數。

若 {num} 是在 rexp 之後,表示要重複尋找包含有 rexp 行 num 次數後才是分隔點。

如 /at/ {10} 是表示重複 10 次以遇到含有 at的行做為分隔點。若為 /at/+3 {10} 則表示重複 10次以遇到含有 at 的行之後的第 3 行為分隔點。若 num 是在 lnno 之後,表示每隔 lnno 行做為分隔點,總共再重複 num 次,如 20 {3} 表示是以第 20、40、60、80 行為分隔點。

若檔案 file 是 '-' 字元時,則從標準輸入讀取資料。

【選項】

選 項 說 明
-s(silent) 在正常情形下,csplit 會印出分割後每個小檔案的大小(以字元為單位)。若使用了 -s 選項,則可使結果不會印出。
-k(keep) 在正常情形下,csplit 會在遇到錯誤後將已分割完成的小檔案刪除,而使用這個選項後可使其保留。
-f prefix 指定分割後小檔案的名稱。結果為 prefix 00... prefix,若無此設定則以預設值 xx00...xxn。

【範例】

1. 設定 2 個分隔點後將一檔案分成 3 部份:

csplit -f data paper /chapter2/ /chapter3/

執行完後將會產生 3 個檔案,分別是:

  1. 檔案 data00,內容包含 paper 檔案最前端到 chapter2所在的行為止(不包含該行)。
  2. 檔案 data01 內容包含 chapter2 的行為第一行chapter3 所在的行為止(不包含該行)。
  3. 檔案 data02 內容包含 chapter3 的行到檔案 pape的尾端。

在 paper 檔案中,含有 chapter2、chapter3 字串的行必須按照先後的次序。

2. 以指定行數為分隔點:

csplit paper 50 100 200

因無指定輸出的檔名,故以 'xx' 為分割後檔名的起頭。

xx00 第 1 行到第 49 行。
xx01 第 50 行到第 99 行。
xx02 第 100 行到第 199 行。
xx03 第 200 行到第 paper 檔案的尾端。

3. 在不知道被處理檔案行數時,將之分成 100 行一單位的小檔案:

csplit -k paper 100 {19}

paper 這個檔案的大小可能有下列三種情形:

  1. 小於 2000 行時,雖然要求 csplit 執行 20次以每 100 行為分隔點,在處理後雖然有錯誤訊息出現, 表示該檔案 paper 與指定的大小不合,但仍有分割的結果產生xx00 到 xx19 的檔案。
  2. 剛好 2000 行時,則正常結束。
  3. 大於 2000 行時,則會產生 xx00 到 xx20 的檔案,而檔案 xx20 會包含到 paper 檔案的尾端。

網路電視    旅遊景點    算命    象棋殘局    回首頁