【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參數格式

四、分割帶有擴展名的文件


上述我們已經將大文件分隔為多個文件存在,但是分割后的文件都沒有擴展名,以下是按照在分隔文件后添加擴展名

現在存在數據文件CUST_INFO.dat(大小為:112M)

我們使用如下命令進行分割

split -b 30m CUST_INFO.dat -d -a 2 file_&&ls|grep file_|xargs -n1 -i{} mv {} {}.txt

命令解釋:

split -b 30m CUST_INFO.dat -d -a 2 file_&&ls 將文件以30M大小進行分割,並且前綴為file_;

xargs -n1 -i{} mv {} {}.txt 將生成的文件重命名為擴展名為txt的

分割后結果如下:

image



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM