首頁 > 軟體

Linux split命令拆分檔案詳解

2020-06-16 16:51:48

Linux split命令可以將一個大檔案分割成指定大小的很多個小檔案,並且拆分速度非常的快,有時需要將檔案分割成更小的片段,比如為提高可讀性,生成紀錄檔。拆分一個1G大小的檔案不到1秒的時間就可以完成,如果在Windows系統上進行操作估計會很卡很卡。

選項

[linuxidc@localhost ~]$ split --help
用法:split [選項]... [輸入 [字首]]
Output fixed-size pieces of INPUT to PREFIXaa, PREFIXab, ...; default
size is 1000 lines, and default PREFIX is 'x'.  With no INPUT, or when INPUT
is -, read standard input.

Mandatory arguments to long options are mandatory for short options too.
  -a, --suffix-length=N  generate suffixes of length N (default 2)
      --additional-suffix=SUFFIX  append an additional SUFFIX to file names
  -b, --bytes=SIZE        put SIZE bytes per output file
  -C, --line-bytes=SIZE  put at most SIZE bytes of lines per output file
  -d, --numeric-suffixes[=FROM]  use numeric suffixes instead of alphabetic;
                                  FROM changes the start value (default 0)
  -e, --elide-empty-files  do not generate empty output files with '-n'
      --filter=COMMAND    write to shell COMMAND; file name is $FILE
  -l, --lines=NUMBER      put NUMBER lines per output file
  -n, --number=CHUNKS    generate CHUNKS output files; see explanation below
  -u, --unbuffered        immediately copy input to output with '-n r/...'
      --verbose  在每個輸出檔案開啟前輸出檔案特徵
      --help  顯示此幫助資訊並退出
      --version  顯示版本資訊並退出

SIZE is an integer and optional unit (example: 10M is 10*1024*1024).  Units
are K, M, G, T, P, E, Z, Y (powers of 1024) or KB, MB, ... (powers of 1000).

CHUNKS may be:
N      split into N files based on size of input
K/N    output Kth of N to stdout
l/N    split into N files without splitting lines
l/K/N  output Kth of N to stdout without splitting lines
r/N    like 'l' but use round robin distribution
r/K/N  likewise but only output Kth of N to stdout

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
請向<http://translationproject.org/team/zh_CN.html> 報告split 的翻譯錯誤
要獲取完整文件,請執行:info coreutils 'split invocation'

版本

[linuxidc@localhost ~]$ split --version
split (GNU coreutils) 8.22
Copyright (C) 2013 Free Software Foundation, Inc.
許可證:GPLv3+:GNU 通用公共許可證第3 版或更新版本<http://gnu.org/licenses/gpl.html>。
本軟體是自由軟體:您可以自由修改和重新發佈它。
在法律範圍內沒有其他保證。

由Torbjörn Granlund 和Richard M. Stallman 編寫。

語法

split(選項)(file)PREFIX

範例

[linuxidc@localhost linuxidc.com]$ more linuxidc
w
w
w
l
i
n
u
x
i
d
c
c
o
m

1.根據行拆分

每3行拆分成一個檔案,拆分後的檔名以linuxidc開頭,以數位作為字尾字尾長度為1

[linuxidc@localhost linuxidc.com]$ split -l 3 linuxidc -d -a 1 linuxmi
[linuxidc@localhost linuxidc.com]$ ll
總用量 24
-rw-rw-r--. 1 linuxidc linuxidc 28 5月  19 19:43 linuxidc
-rw-rw-r--. 1 linuxidc linuxidc  6 5月  19 19:45 linuxmi0
-rw-rw-r--. 1 linuxidc linuxidc  6 5月  19 19:45 linuxmi1
-rw-rw-r--. 1 linuxidc linuxidc  6 5月  19 19:45 linuxmi2
-rw-rw-r--. 1 linuxidc linuxidc  6 5月  19 19:45 linuxmi3
-rw-rw-r--. 1 linuxidc linuxidc  4 5月  19 19:45 linuxmi4

2.按位元組進行拆分

每三個位元組拆分成一個檔案,預設不加單位就是位元組,也可以帶單位比如KB,MB等

[linuxidc@localhost linuxidc.com]$ split -b 3 linuxidc -d -a 1 CentOS
[linuxidc@localhost linuxidc.com]$ ls -l centos*
-rw-rw-r--. 1 linuxidc linuxidc 3 5月  19 19:48 centos0
-rw-rw-r--. 1 linuxidc linuxidc 3 5月  19 19:48 centos1
-rw-rw-r--. 1 linuxidc linuxidc 3 5月  19 19:48 centos2
-rw-rw-r--. 1 linuxidc linuxidc 3 5月  19 19:48 centos3
-rw-rw-r--. 1 linuxidc linuxidc 3 5月  19 19:48 centos4
-rw-rw-r--. 1 linuxidc linuxidc 3 5月  19 19:48 centos5
-rw-rw-r--. 1 linuxidc linuxidc 3 5月  19 19:48 centos6
-rw-rw-r--. 1 linuxidc linuxidc 3 5月  19 19:48 centos7
-rw-rw-r--. 1 linuxidc linuxidc 3 5月  19 19:48 centos8
-rw-rw-r--. 1 linuxidc linuxidc 1 5月  19 19:48 centos9

3.生成一個大小為100KB的測試檔案:

[linuxidc@localhost linuxidc.com]$ dd if=/dev/zero bs=100k count=1 of=linuxidc.file
記錄了1+0 的讀入
記錄了1+0 的寫出
102400位元組(102 kB)已複製,0.00037479 秒,273 MB/秒
[linuxidc@localhost linuxidc.com]$ ll
總用量 100
-rw-rw-r--. 1 linuxidc linuxidc 102400 5月  19 19:51 linuxidc.file

4.使用split命令將上面建立的linuxidc.file檔案分割成大小為10KB的小檔案:

[linuxidc@localhost linuxidc.com]$ split -b 10k linuxidc.file
[linuxidc@localhost linuxidc.com]$ ls
linuxidc.file  xaa  xab  xac  xad  xae  xaf  xag  xah  xai  xaj

5.此時檔案被分割成多個帶有字母的字尾檔案,如果你想用數位字尾可使用-d引數,同時可以使用-a length來指定字尾的長度:

[linuxidc@localhost linuxidc.com]$ split -b 10k linuxidc.file  -d -a 3
[linuxidc@localhost linuxidc.com]$ ls
linuxidc.file  x000  x001  x002  x003  x004  x005  x006  x007  x008  x009

6.為分割後的檔案指定檔名的字首:

[linuxidc@localhost linuxidc.com]$ split -b 10k linuxidc.file -d -a 3 linuxmi_file
[linuxidc@localhost linuxidc.com]$ ls
linuxidc.file    linuxmi_file002  linuxmi_file005  linuxmi_file008
linuxmi_file000  linuxmi_file003  linuxmi_file006  linuxmi_file009
linuxmi_file001  linuxmi_file004  linuxmi_file007

7.使用-l選項根據檔案的行數來分割檔案,例如把檔案分割成每個包含10行的小檔案:

[linuxidc@localhost linuxidc.com]$ split -l 10 linuxidc.file

8.將split分割的檔案合併成一個

[linuxidc@localhost linuxidc.com]$ split -b 10k linuxidc.file
[linuxidc@localhost linuxidc.com]$ ls
linuxidc.file  xaa  xab  xac  xad  xae  xaf  xag  xah  xai  xaj
[linuxidc@localhost linuxidc.com]$ cat x*>>y*
[linuxidc@localhost linuxidc.com]$ ls
linuxidc.file  xaa  xab  xac  xad  xae  xaf  xag  xah  xai  xaj  y*

總結

Linux下的spit命令非常實用,比如匯入資料時將檔案進行拆分並匯入會快很多。

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

本文永久更新連結地址https://www.linuxidc.com/Linux/2018-05/152455.htm


IT145.com E-mail:sddin#qq.com