在linux系統下用vim打開大小幾個G、甚至轎散並幾十個G的文件時,是非常慢的。
這時,我們可以利用下面的方法分割文件,然後再打開。
1、查看/導出文件的前多少行
上面命令的意思是:把big.log文件前10000行的數據寫入到temp.log文件中。
2 、查看文件掘氏的後多少行
上面命令的意思是:把big.log文件後10000行的數據寫入到temp.log文件中。
3 、查看文件的幾行到幾行
上面命令的意思是:把big.log文件第10到10000行的數據寫入到temp.log文件中。
4 、根據查詢條件導出
5、 實閉跡時監控文件輸出(查看日誌時經常會用到)
㈡ Linux裡面分割,切片是什麼
在Linux最常用的文件生成和切片工具是dd,它功能比較全面,但無法以行為單位提取文件數據,也無法直接將文件按大小或行數進行均分(除非藉助循環)。另兩款數據分割工具split和csplit能夠比較輕松地實現這些需求。csplit是split的升級版。
1.1 dd命令
從if指定的文件讀取數據,寫入到of指定的文件。使用bs指定讀取和寫入的塊大小,使用count指定讀取和寫入的數據塊數量,bs和count相乘就是文件總大小。可以指定skip忽略讀卜鬧取if指定文件的前多少個塊,seek指定寫入到of指定文件時忽略前多少個塊。型頌罩
dd if=/dev/zero of=/tmp/abc.1 bs=1M count=20
if是input file,of是output file;bs有c(1byte)、w(2bytes)、b(512bytes)、kB(1000bytes)、K(1024bytes)、MB(1000)、M(1024)和GB、G等幾種單位。因此,不要隨意在單位後加上字母B。
假設現有文件CentOS.iso的大小1.3G,需要將其切分後還原,切分的第一個小文件大小為500M。
dd if=/tmp/CentOS.iso of=/tmp/CentOS1.iso bs=2M count=250
生成第二個小文件,由於第二個小文件不知道具體大小,所以不指定count選項。由於第二個小文件要從第500M處開始切分,於是需要忽略CentOS.iso的前500M。假設bs=2M,於是skip掉的數據塊數量為250。
dd if=/tmp/CentOS.iso of=/tmp/CentOS2.iso bs=2M skip=250
現在CentOS.iso=CentOS1.iso+CentOS2.iso。可以將CentOS[1-2].iso還原。
cat CentOS1.iso CentOS2.iso >CentOS_m.iso
比較CentOS_m.iso和CentOS.iso的md5值,它們是完全一樣的。
shell> md5sum CentOS_m.iso CentOS.iso
CentOS_m.iso
CentOS.iso
那麼seek選項呢?和skip有什麼區別?skip選項是忽略讀取時的前N個數據塊,而seek是忽略寫入文件的前N個數據塊。假如要寫入的文件為a.log,則seek=2時,將從a.log的第3個數據塊開始追加數據,如果a.log文件本身大小就不足2個數據塊,則缺少的部分自動使用/dev/zero填充。
於是,在有了CentOS1.iso的基礎上,要將其還原為和CentOS.iso相同的文件,可以使用下面的方法:
dd if=/tmp/CentOS.iso of=/tmp/CentOS1.iso bs=2M skip=250 seek=250
還原後,它們的md5值也是相同的。
shell>md5sum CentOS1.iso CentOS.iso
CentOS1.iso
CentOS.iso
1.2 split命令
split工具的功能是將文件切分為多個小文件。既然要生櫻漏成多個小文件,必然要指定切分文件的單位,支持按行切分以及按文件大小切分,另外還需解決小文件命名的問題。例如,文件名前綴、後綴。如果未明確指定前綴,則默認的前綴為"x"。
以下是命令的語法說明:
例如,將/etc/fstab按行切分,每5行切分一次,並指定小文件的前綴為"fs_",後綴為數值後綴,且後綴長度為2。
[root@linuxidc ~]# split -l 5 -d -a 2 /etc/fstab fs_
[root@linuxidc~]# lsfs_00 fs_01 fs_02
查看任一小文件。
[root@linuxidc ~]# catfs_01
# Accessible filesystems, by reference, are maintained under'/dev/disk'# Seeman pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info#
UUID=b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8 / xfs defaults 0 0UUID=367d6a77-033b-4037-bbcb-416705ead095 /boot xfs defaults 0 0
可以將這些切分後的小文件重新組裝還原。例如,將上面的三個小文件還原為~/fstab.bak。
[root@linuxidc ~]# cat fs_0[0-2] >~/fstab.bak
還原後,它們的內容是完全一致的。可以使用md5sum比較。
[root@linuxidc ~]# md5sum /etc/fstab ~/fstab.bak
/etc/fstab
/root/fstab.bak
還可以將標准輸入的數據進行切分,並分別寫入到小文件中。例如:
[root@linuxidc ~]# seq 1 2 15 | split -l 3 -d -new_
[root@linuxidc~]# ls new*new_00 new_01 new_02
可以為每個小文件追加額外的後綴。有些老版本的split不支持該選項,而是在csplit上支持的,但是新版本的split已經支持。例如,加上".log"。
[root@linuxidc ~]# seq 1 2 20 | split -l 3 -d -a 3 --additional-suffix=".log" -new1_
[root@linuxidc~]# ls new1*new1_000.log new1_001.log new1_002.log new1_003.log
1.3 csplit命令
split只能按行或按照大小進行切分,無法按段落切分。csplit是split的變體,功能更多,它主要是按指定上下文按段落分割文件。
csplit [OPTION]... FILE PATTERN...
描述:按照PATTERN將文件切分為"xx00","xx01", ...,並在標准輸出中輸出每個小文件的位元組數。
選項說明:-b FORMAT:指定文件後綴格式,格式為printf的格式,默認為%02d。表示後綴以2位數值,且不足處以0填充。-f PREFIX:指定前綴,不指定是默認為"xx"。-k:用於突發情況。表示即使發生了錯誤,也不刪除已經分割完成的小文件。-m:明確禁止文件的行去匹配PATTERN。-s:(silent)不列印小文件的文件大小。-z:如果切分後的小文件中有空文件,則刪除它們。
FILE:待切分的文件,如果要切分標准輸入數據,則使用"-"。
PATTERNs:
INTEGER :數值,假如為N,表示拷貝1到N-1行的內容到一個小文件中,其餘內容到另一個小文件中。/REGEXP/[OFFSET]:從匹配到的行開始按照偏移量拷貝指定行數的內容到小文件中。
:其中OFFSET的格式為"+N"或"-N",表示向後和向前拷貝N行%REGEXP%[OFFSET]:匹配到的行被忽略。
{INTEGER} :假如值為N,表示重復N此前一個模式匹配。
{*} :表示一直匹配到文件結尾才停止匹配。
假設文件內容如下:
[root@linuxidc ~]# cattest.txt
SERVER-1[connection]192.168.0.1success
[connection]192.168.0.2failed
[disconnect]192.168.0.3pending
[connection]192.168.0.4success
SERVER-2[connection]192.168.0.1failed
[connection]192.168.0.2failed
[disconnect]192.168.0.3success
[CONNECTION]192.168.0.4pending
SERVER-3[connection]192.168.0.1pending
[connection]192.168.0.2pending
[disconnect]192.168.0.3pending
[connection]192.168.0.4 failed
假設每個SERVER-n表示一個段落,於是要按照段落切分該文件,使用以下語句:
[root@linuxidc ~]# csplit -f test_ -b %04d.log test.txt /SERVER/ {*}0
140
139
140
"-f test_" 指定小文件前綴為"test_", "-b %04d.log" 指定文件後綴格式"00xx.log",它自動為每個小文件追加額外的後綴".log", "/SERVER/" 表示匹配的模式,每匹配到一次,就生成一個小文件,且匹配到的行是該小文件中的內容, "{*}" 表示無限匹配前一個模式即/SERVER/直到文件結尾,假如不知道{*}或指定為{1},將匹配一次成功後就不再匹配。
[root@linuxidc ~]# ls test_*test_0000.log test_0001.log test_0002.log test_0003.log
上面的文件中雖然只有三個段落:SERVER-1,SERVER-2,SERVER-3,但切分的結果生成了4個小文件,並且注意到第一個小文件大小為0位元組。為什麼會如此?因為在模式匹配的時候,每匹配到一行,這一行就作為下一個小文件的起始行。由於此文件第一行"SERVER-1"就被/SERVER/匹配到了,因此這一行是作為下一個小文件的內容,在此小文件之前還自動生成一個空文件。
生成的空文件可以使用"-z"選項來刪除。
[root@linuxidc ~]# csplit -f test1_ -z -b %04d.log test.txt /SERVER/ {*}140
139
140
還可以指定只拷貝匹配到的行偏移數量。例如,匹配到行時,只拷貝它後面的1行(包括它自身共兩行),但多餘的行將放入下一個小文件中。
[root@linuxidc ~]# csplit -f test2_ -z -b %04d.log test.txt /SERVER/+2 {*}42
139
140
98
第一個小文件只有兩行。
[root@linuxidc ~]# cattest2_0000.log
SERVER-1[connection]192.168.0.1 success
SERVER-1段落的其餘內容放入到了第二個小文件中。
[root@linuxidc ~]# cattest2_0001.log
[connection]192.168.0.2failed
[disconnect]192.168.0.3pending
[connection]192.168.0.4success
SERVER-2[connection]192.168.0.1 failed
同理第三個小文件也一樣,直到最後一個小文件中存放剩餘所有無法匹配的內容。
[root@linuxidc ~]# cattest2_0003.log
[connection]192.168.0.2pending
[disconnect]192.168.0.3pending
[connection]192.168.0.4 failed
指定"-s"或"-q"選項以靜默模式運行,將不會輸出小文件的大小信息。
[root@linuxidc ~]# csplit -q -f test3_ -z -b %04d.log test.txt /SERVER/+2 {*}
㈢ linux split拆分文件
http://c.biancheng.net/linux/split.html
15 分鍾之後,我要去朋友家聚會。我打算從我的台式機上把一部 700MB 大小的美國大片拷貝出來,帶到朋友家去看,可是我的兩個優盤都只有 512MB,這讓我如何是好?
別急,用 10 分鍾趕快來認識一下我們的 split 拆分小能手,一切問題將迎刃而解。當遇到大文件而苦不堪言的時候,split 就會像天使一樣解救我們弊友於水火之中。
合久必分
閑言少敘,我們現在就來介紹拆分的方法。先使用 dd 命令來生成一個 700MB 文件來作為我們的拆分對象:
美國大片的文件大小是 700MB,而我手邊僅有的兩個優盤,都是 512MB 大小的。我打算把文件以 400MB 作為一個拆分單位,來進行拆分。這里使用到了 split 的-b選項,來指定每個拆分文件的大小:
看!分身完畢!咦,怎麼多出了 xaa 和 xab 兩個文件,這么奇怪的名字?
是的,你沒看錯,在沒有明確指定拆分後文件的命名方式的情況下,split 會默認採用 x 字元作為文件前綴,採用類似 aa、ab、ac 的字元串依次作為文件後綴。於是,就出現了我們上面看到的 xaa、xab 了。
從文件大小來看,如我們所願,電影文件的確被切割成了一個 400MB 的文件、一個 300MB 的文件,終於可以裝到兩個優盤里了。
知其然,知其所以然
知道了拆分命令後,我們來一起學習一下 split 的命令格式和常用選項。
split 的作用很好描述,就是將文件按照一定規則進行拆分。一般情況下,我們可以按照文件大小來進行拆分,如果是文本文件的話,還可以按照行數來進行拆分,默認是 1000 行作為一個拆分單位。
默認情況下,分割後的文件的名稱會以 x 作為前綴,以 aa、ab、亮羨ac 這樣的雙字母格式作為後綴,形成 xaa、xab 這樣的名稱格式。
我們來一起看看 split 的命令格式:
split [-b ][-C ][-][-l ][要切割的文件][輸出文件名前綴][-a ]
最常用的選項,都在這里了:
-b<位元組>:指定按多少位元組進行拆分,也可以指定 K、M、G、T 等單位。
-<行數>或-l<行數>:指定每多少行要拆分成一個文件。
輸出文件名前綴:設置拆分後的文件的名稱前綴,split 會自動在前綴後加上編號,默認從 aa 開始。
-a<後綴長度>:默認的後綴長度是 2,也就是按 aa、ab、ac 這樣的格式依次編號。
分久必合
完成了美國大片的拆分,我趕赴朋友家,打開他的電腦,優盤插上,使用 cat 命令將拆分文件 xaa 和 xab 合並成一個文件,可以看出合並後的文件和源文件的大小是一致的:
對了,如果是在 Windows 下的話,我們要先運行 cmd,然後用 命令來進行文件的合並:
/b xaa + xab king_of_ring.avi
格式上和 Linux 有些區別,但原理是一樣的。
設置拆分文件的名稱前綴
上面例子中,我們沒有指定拆分文件的名稱前綴,結果拆分後的文件名都是敬卜拍 aa、ab 這樣的名稱,這樣的名稱既不達意也不美觀。
下面的例子,我們嘗試以 king_of_ring_part_ 作為拆分後文件的名稱前綴:
[root@roclinux ~]$ split -b 400m king_of_ring.avi king_of_ring_part_
文件名的可讀性是不是提高了不少,從文件名稱就可以看出來是美國大片的拆分文件啦。
設置數字後綴
如果大家看不慣以 aa、ab 這種字母作為文件後綴,我們還可以通過-d選項來指定數字形式的文件後綴:
[root@roclinux ~]$ split -b 400m -d king_of_ring.avi king_of_ring_part_
對於中國人來說,數字形式的後綴,增加了文件名稱的可讀性。
按照行數進行拆分
前面我們講的是按照文件大小(如 400MB)進行文件拆分的方法,但是並非所有情況都適合於用文件大小作為拆分單元。比如,我們希望把 /etc/passwd 文件按照一個文件 10 行記錄的方式進行拆分,又該怎麼操作呢?
[root@roclinux ~]$ split -d -10 /etc/passwd my_passwd_
合並後的校驗不可少
需要注意的是,在通過網路來傳輸大文件,或者在設備之間復制大文件的時候,可能會出現傳輸前後數據不一致的情況。
使用 split 來拆分大文件僅僅是故事的開始,操作完畢後化零為整、完璧歸趙才是完美的結局。因此需要在合並文件後進行文件的完整性校驗,推薦使用 md5sum 來計算和比對前後兩個大文件的 md5 值。
如果前後一致,那麼恭喜你,文件合並成功!
好了,split 學完了,我們也可以和朋友一起欣賞驚險刺激的美國大片了!
㈣ linux文件拆分命令
Linux中分割文件用split命令,這個命令可以將一個文件分割成指定大小的多個文件,split命令的用法是:
split -b 分割的大小 需要分割的文件名 分割後文件的前導文字
這里解釋一下,-b參數表示按照文件大小單位來進行分割(split命令還有一個-l參數,是根據文本文件的行數來進行分割,這個-b參數是根據大小來分割的),-b參數後面跟的是分割的依據——文件大小,文件大小的單位可以是b、k、m,比如300m。「分割後文件的前導文字」是幹嘛的呢,其實是在分割後的文件名前面加上一個前綴。下面是一個例子,就假設需要分割的文件是/root/bigfile:
split -b 50m /root/bigfile chunk
這條命令產生的分割文件可能是:chunkaa、chunkab、chunkac,看到前導文字的作用了吧。
那麼如何將分割後的文件再合並起來呢,還是接著上面的那個例子,用下面這條命令就可以了(先用cd /root切換到/root目錄):
cat chunk* >> bigfile
㈤ linux 如何將一個大文件分成幾個小文件
1、連接上相應的linux主機,進入到等待輸入shell指令的linux命令行狀態下。
㈥ linux中怎麼將文件合並
方法一:使用cat命令從文件中讀入兩個文件,然後將重定向到一個新的文件。這種方法可以一次性合並任意多個文件。
用法示例:
將file1.txt和file2.txt合並到file.txt
$ cat file1.txt file2.txt > file.txt
方法二:只使用cat命令讀入一個文件,然後使用>>將文本流追加到另一個文件的末位。
用法示例:
將file1.txt追加到file2.txt的末尾
$ cat file1.txt >> file2.txt
反之分割文件
linux下文件分割可以通過split命令來實現,可以指定按行數分割和安大小分割兩種模式。Linux下文件合並可以通過cat命令來實現,非常簡單。
1、在Linux下用split進行文件分割:
模式一:指定分割後文件行數
對與txt文本文件,可以通過指定分割後文件的行數來進行文件分割。
命令:split-l300large_file.txtnew_file_prefix
模式二:指定分割後文件大小
split-b10mserver.logwaynelog
對二進制文件我們同樣也可以按文件大小來分隔。
2、將一個大文件分成若干個小文件方法
例如將一個BLM.txt文件分成前綴為 BLM_ 的1000個小文件,後綴為系數形式,且後綴為4位數字形式
先利用wc -l BLM.txt
讀出 BLM.txt 文件一共有多少行
再利用 split 命令
split -l 2482 ../BLM/BLM.txt -d -a 4 BLM_
將文件 BLM.txt 分成若干個小文件,每個文件2482行(-l 2482),文件前綴為BLM_ ,系數不是字母而是數字(-d),後綴系數為四位數(-a 4)
㈦ 「方法」Linux下將文件打包、壓縮並分割成指定大小
https://blog.csdn.net/whu_zhangmin/article/details/45870077
tar -zcvf cm-11.tar.gz cm-11
//將cm-11文件夾壓縮成cm-11.tar.gz
split -b 4000M -d -a 1 cm-11.tar.gz cm-11.tar.gz.
//使用split命令,-b 4000M 表示設置每個分割包的大小,單位還是可以k
// -d "參數指定生成的分割包後綴為數字的形式
//-a x來設定序列的長度(默認值是2),這里設定序列的長度為1
執行命令後,生成壓縮包如下:
tar -zcvf cm-11.tar.gz cm-11 | split -b 4000M -d -a 1 - cm-11.tar.gz.
//採用管道,其中 - 參數表示將所創建的文件輸出到標准輸出上
tar -zxvf cm-11.tar.gz
cat cm-11.tar.gz.* | tar -zxv
tar可以用來壓縮打包單文件、多個文件、單個目錄、多個目錄。
Linux打包命令 tar
tar命令可以用來壓縮打包單文件、多個文件、單個目錄、多個目錄。
常用格式:
單個文件壓縮打包 tar -czvf my.tar.gz file1
多個文件壓縮打包 tar -czvf my.tar.gz file1 file2,...(file )(也可以給file 文件mv 目錄在壓縮)
單個目錄壓縮打包 tar -czvf my.tar.gz dir1
多個目錄壓縮打包 tar -czvf my.tar.gz dir1 dir2
解包至當前目錄:tar -xzvf my.tar.gz
cpio
含子目錄find x* | cpio -o > /y/z.cpio
不含子目錄ls x* | cpio -o > /y/z.cpio
解包: cpio -i < /y/z.cpio
[root@linux ~]# tar [-cxtzjvfpPN] 文件與目錄 ....
參數:
-c :建立一個壓縮文件的參數指令(create 的意思);
-x :解開一個壓縮文件的參數指令!
-t :查看 tarfile 裡面的文件!
特別注意,在參數的下達中, c/x/t 僅能存在一個!不可同時存在!
因為不可能同時壓縮與解壓縮。
-z :是否同時具有 gzip 的屬性?亦即是否需要用 gzip 壓縮?
-j :是否同時具有 bzip2 的屬性?亦即是否需要用 bzip2 壓縮?
-v :壓縮的過程中顯示文件!這個常用,但不建議用在背景執行過程!
-f :使用檔名,請留意,在 f 之後要立即接檔名喔!不要再加參數!
例如使用『 tar -zcvfP tfile sfile』就是錯誤的寫法,要寫成
『 tar -zcvPf tfile sfile』才對喔!
-p :使用原文件的原來屬性(屬性不會依據使用者而變)
-P :可以使用絕對路徑來壓縮!
-N :比後面接的日期(yyyy/mm/dd)還要新的才會被打包進新建的文件中!
--exclude FILE:在壓縮的過程中,不要將 FILE 打包!
㈧ linux大文件的拆分 合並 壓縮 解壓縮
1.分割 -- split命令
可宴友以指定按行數分割和按位元組大小分割兩種模式。
(1) 按行數分割
加上-d,使用數字後綴;加上--verbose,顯示分割進度:
(2) 按位元組大小分族祥滲割
2.合並兆脊 -- cat命令
3 . 文件壓縮成 tar.gz
4 . 解壓縮 tar.gz文件