我們有時候會遇到大檔案需要處理,當檔案過大時,linux中使用vim、cat、vim、grep、awk 等這些工具對大檔案進行分析執行速度緩慢,占用記憶體資源大,檔案傳輸慢;
下面我有乙個原始檔案,sourcelist.xlsx ,比較大了,5g多,光是用wc -l統計行數,時間就花費了3分鐘;
linux命令 split提供兩種方式(按照行切割、或者按照大小切割,見後面第1和第2步驟)對檔案進行切割:
1、根據行數切割,-l引數,以下命令是50w行乙個檔案, --verbose表示顯示執行的詳細過程,sourcelist.xlsx原檔名,target.xlsx是分割以後目標檔名:
生成後的檔名有一點問題,我們本來需要的是*.xlsx檔案字尾,現在分割後的檔案序號跑到了檔案字尾的後面,需要處理一下:
for i in `ls|grep target`; do a=`echo $i|awk -f '.xlsx' ''`; mv $i $a; done (這個命令我問的運維),執行完後:
然後我們再來看分割後的檔案,行數是否跟之前預期匹配,貌似沒有問題,50w行:wc -l target11.xlsx ,wc -l target12.xlsx
但是分割以後的檔案大小不一樣,因為每行檔案內容不一樣,所以下面第2種方式,按照大小分割的命令,我們不太推薦:
2、根據大小切割,-b(不推薦這種方式,如果linux強行按照大小去分割檔案,那麼可能會破壞原始資料的格式完整性,比如剛好在某一行資料中間,前後就被分割到了相鄰的兩個檔案中)
split -b 60m -d --verbose sourcelist.xlsx target.xlsx,分割以後的檔案如下:
3、說完了分割,那麼合併檔案的方式呢?
cat 命令
cat target00.xlsx target01.xlsx > targetmerge.xlsx,合併後的targetmerge.xlsx大小 120mb,合理:
備註:在上面第1步,split -l 500000 -d --verbose sourcelist.xlsx target.xlsx命令生成新檔案,關於格式字尾的問題,
其實可以先生成得時候不加字尾,: split -l 500000 -d --verbose sourcelist.xlsx target
target**就是新檔名,我們通過命令來統一給新生成的檔案再加上字尾:
linux大檔案分割 split命令
linux大檔案分割 split命令 inux split命令 功能說明 切割檔案。語 法 split help version 行數 b 位元組 c 位元組 l 行數 要切割的檔案 輸出檔名 行數 位元組 位元組 行數 補充說明 split可將檔案切成較小的檔案,預設每1000行會切成乙個小檔案。...
linux大檔案分割 split命令
inux split 命令 功能說明 切割檔案。語 法 split help version b c l 要切割的檔案 輸出檔名 補充說明 split可將檔案切成較小的檔案,預設每1000行會切成乙個小檔案。參 數 或 l 指定每多少行就要切成乙個小檔案。b 指定每多少字就要切成乙個小檔案。支援單位...
linux大檔案分割 split命令
linux split 命令 功能說明 切割檔案。語 法 split help version 行數 b 位元組 c 位元組 l 行數 要切割的檔案 輸出檔名 補充說明 split可將檔案切成較小的檔案,預設每1000行會切成乙個小檔案。參 數 行數 或 l 行數 指定每多少行就要切成乙個小檔案。b...