2021-05-12 14:32:11
Linux split命令拆分檔案詳解
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
相關文章