通過split命令分割大文件


應用場景

  面試題:大文件,小內存怎么讀取
  線上出問題,通過查找log定位問題,由於線上數據量龐大,這些log文件可能達到了五六g以上的大小。

  對於這種巨大的log文件,常用的一些文本編輯器諸如EditPlus、Notepad++就不用說了,打開幾百m的文件都會很卡,上g的直接程序崩潰。雖然UltraEdit對於大文件的讀取會友好一些,但打開這種五六g的文件時也會陷入長時間的無響應狀態。

  后來找到看log神器——glogg,打開五六g的大文件速度很快,但是有個問題,就是只能讀取文件,不能編輯文件。畢竟我不只是要查看log,有時候還要對這些有用的log信息進行編輯。最后還是決定先把大文件分割成數個小文件,再用UltraEdit來查看這些文件。

使用split命令分割大文件

  1. 在Linux下,切割和合並文件可以使用split和cat命令來實現。
  2. 在Windows下,安裝Git Bash也可以使用split和cat命令。

分割文件的命令是split,通過輸入split --help可以查詢幫助信息。假設現在有個6GB大小的文件test.log,這里簡單介紹下幾種分割的方式:

1. 按大小分割文件

  split -b 1000000000 test.log

  • -b參數表示按字節大小進行分割,在數字后邊要指定被分割的文件名。這里在輸入文件名時有個小技巧,可以直接把該文件拖動到cmd窗口中,會自動輸入該文件的具體目錄。這里的文件還可以使用通配符,比如split -b 1000000000 *。
  • 這個命令表示按1000000000byte的大小進行分割,近似於1GB,大概是953MB的大小。對於這個6GB大小的文件test.log,會被分割成6個小文件。這些小文件的命名是有規律的:xaa、xab、xac、xad、xae、xaf。如果你分割了非常多的小文件,當文件名到了xyz之后,會變成xzaaa、xzaab、xzaac、xzaad……所以不用擔心小文件過多而導致文件重名什么的。
  • 當然,上邊的這種寫法不夠人性化,我們可以使用其他的單位來指定分割的大小:k、m。k表示KB,m表示MB。
  • split -b 100k test.log表示將test.log按照100KB的大小進行分割。
  • split -b 100m test.log表示將test.log按照100MB的大小進行分割。

2. 按照所有行數加起來的最大字節數進行分割

split -C 100k test.log

  • -C參數表示按照所有行數加起來的最大字節數進行分割,同樣可以使用k或者m作為單位,其實效果和上邊的-b差不多,只是在切割時將盡量維持每行的完整性。

3. 按照行數進行分割

  split -l 1000 test.log

  split -1000 test.log

  • -l參數表示按照行數進行分割,即一個小文件中最多有多少行,-l number可以縮寫成-number,上邊的命令表示按照1000行一個小文件進行分割。

4. 注意點

這三種分割的方式不能混合使用,如下:

  split -l 3000 -C 100k *
  會報錯split: cannot split in more than one way。


免責聲明!

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



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