一、split命令
在Linux系統中,我們可以使用split命令來分割文件。終端中輸入以下命令:
$ split [options] input_file prefix
其中,options是選項,可以選擇是否指定每個文件的大小、文件名等;input_file為需要分割的文件名;prefix為分割後生成的文件前綴,可以自己取一個名字。
具體來說,我們可以有以下選項:
- -a suffix_length:指定生成文件名後綴的長度,默認為2
- -b size:指定每個文件的大小,可以為B、K、M、G進行單位轉換,例如10M表示每個文件大小為10兆位元組,不指定則默認為2G
- -d:使用數字作為後綴
- -l line_count:按行數切分,每個文件行數相等
- –verbose:輸出分割過程
例如,我們想要將一個名為big_file的大文件分割成以sample為前綴的小文件,每個文件大小為1MB:
$ split -b 1M big_file sample
執行上述命令後,會自動將big_file分割成若干個1MB大小的文件,並且以sample作為文件名前綴,加上後綴序號。
二、csplit命令
相比於split命令,csplit可以按照文件內容進行分割。假設我們要將大小如下的文件content分割成兩部分:前半部分包含字元串abc,後半部分包含字元串efg。可以在終端中輸入以下的命令:
$ csplit content /abc/ /efg/
其中,content為需要分割的文件名,/abc/和/efg/為正則表達式,表示匹配含有abc和efg的字元串作為分割標誌。
通過以上命令,csplit會將content文件分割為兩個文件xx00和xx01,其中xx00包含了abc字元串之前的內容,xx01則包含了efg字元串之後的內容。
三、按行數分割文件
除了上述命令,我們還可以通過sed命令實現按行數分割文件。相比於split命令和csplit命令,sed命令更加靈活,可以根據需求進行配置。
先看一下命令格式:
$ sed -n $startLine,$endLinep fileName > newFileName
其中,$startLine和$endLine分別代表需要分割的起始行和結束行,fileName為原文件名,newFileName為新文件名,可以自定義。
例如,我們將一個名為text.txt的大文件按行數分割成每個文件包含10行的小文件,可以使用以下命令:
$ sed -n 1,10p text.txt > text_1.txt
$ sed -n 11,20p text.txt > text_2.txt
...
多個文件同樣建議使用循環來進行分割操作:
$ file="text.txt"
$ startLine=1
$ num=10
$ lines=$(cat $file | wc -l)
$ for (( i=1; (( i - 1 ) * $num + 1 ) <= $lines; i++ ))
do
endLine=$(( $num * $i ))
sed -n ${startLine},${endLine}p $file > text_$i.txt
startLine=$(( $endLine + 1 ))
done
執行上述命令,會自動將text.txt分割成每個文件包含10行的形式,同時命名為text_1.txt、text_2.txt…等。
四、split命令常用技巧
使用split命令時,常見的一些技巧有:
- 1、分割後的文件名自動按數字編號排序。
- 2、通過cat命令可以將分割後的多個小文件合併為一個大文件。
- 3、可以使用find命令根據文件名前綴進行搜索。
- 4、使用rm命令可以刪除分割後的小文件。
例如:
- 1、將文件合併:cat sample* > big_file
- 2、在當前目錄下,根據sample前綴搜索文件:find . -name “sample*”
- 3、刪除sample前綴的所有小文件:rm -r sample*
以上技巧均可以根據實際需求進行靈活使用,更好地適應多種情況的處理。
五、總結
Linux系統中的文件分割命令包括split、csplit、sed等多種,每個命令都有其獨特的優點。
使用split命令最為常見,可以按照文件大小、行數等進行分割;csplit命令可以按照字元串內容進行分割;sed命令則是根據行數進行分割。
在實際使用過程中,可以結合多個命令進行靈活運用,利用命令行的強大功能輕鬆搞定大文件的分割處理。
原創文章,作者:PSNZJ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/370460.html