按行分割大資料量檔案的bash指令碼實現

2021-06-15 08:49:31 字數 3190 閱讀 7856

資料庫幾十萬的資料量備份下來後,如果直接在乙個檔案中匯入到資料庫中,無法實現。於是就想著怎麼按行把資料檔案分割成小塊檔案操作。

仔細看了下linux的head和tail指令,發現很符合按行分割的要求。接下來就是如何設計乙個shell指令碼,自動完成分割工作了。

指令碼如下(無論資料量多大,分割成50000條乙個檔案):

divide.sh

#!/bin/bash

echo "please input the large file:"

read largefile

echo "please input the output file(will add '.unl' automaticlly):"

read outputfile

#each file index,begin with 1

index=1

#divide size,each size 50000

size=50000

eachsize=50000

#get the largefile size

filesize=`wc -l $largefile | awk ''`

echo "the large file size is $filesize."

#divide the large file to divided files, 50000 by 50000

while [ $size -lt $filesize ]

do tempfile=`echo "$outputfile$index.unl"`

echo "outputfile is made:$tempfile"

index=`expr $index + 1`

rm $tempfile

touch $tempfile

echo "head -$size $largefile | tail -$eachsize - > $tempfile"

`head -$size $largefile | tail -$eachsize - > $tempfile`

#next 50000

size=`expr $size + 50000`

done

#some oddment

size=`expr $size - 50000`

oddment=`expr $filesize - $size`

if [ $oddment -gt 0 ]; then

tempfile=`echo "$outputfile$index.unl"`

echo "outputfile is made:$tempfile"

rm $tempfile

touch $tempfile

echo "tail -$oddment $largefile > $tempfile"

`tail -$oddment $largefile > $tempfile`

fiecho "divide over!"

shell執行效果(以分割666666行記錄的mytable.unl資料庫匯出檔案為例):

linux /home/user123/test> ./divide.sh

please input the large file:

mytable.unl

please input the output file(will add '.unl' automaticlly):

test

the large file size is 666666.

outputfile is made:test1.unl

head -50000 mytable.unl | tail -50000 - > test1.unl

outputfile is made:test2.unl

head -100000 mytable.unl | tail -50000 - > test2.unl

outputfile is made:test3.unl

head -150000 mytable.unl | tail -50000 - > test3.unl

outputfile is made:test4.unl

head -200000 mytable.unl | tail -50000 - > test4.unl

outputfile is made:test5.unl

head -250000 mytable.unl | tail -50000 - > test5.unl

outputfile is made:test6.unl

head -300000 mytable.unl | tail -50000 - > test6.unl

outputfile is made:test7.unl

head -350000 mytable.unl | tail -50000 - > test7.unl

outputfile is made:test8.unl

head -400000 mytable.unl | tail -50000 - > test8.unl

outputfile is made:test9.unl

head -450000 mytable.unl | tail -50000 - > test9.unl

outputfile is made:test10.unl

head -500000 mytable.unl | tail -50000 - > test10.unl

outputfile is made:test11.unl

head -550000 mytable.unl | tail -50000 - > test11.unl

outputfile is made:test12.unl

head -600000 mytable.unl | tail -50000 - > test12.unl

outputfile is made:test13.unl

head -650000 mytable.unl | tail -50000 - > test13.unl

outputfile is made:test14.unl

tail -16666 mytable.unl > test14.unl

divide over!

最後不滿50000條的,單獨記錄到乙個新的檔案中。

imp匯入大資料量檔案

在使用exp imp將資料轉移時,由於現場的資料可能是海量,在使用exp匯出的時候,exp會匯出建表語句和表的內容,建表中有乙個引數initial,這個引數表示表的初始化的大小,預設是64k,而exp時,會根據表的大小動態的改變這個值,那麼在匯入的時候,會先建立這個表,而假如是海量資料,那麼建立表就...

大資料量的處理

其實這個問題老是在面試的時候提到 1。建立專門的彙總表 這個表一般是每天晚上做統計處理 建立索引 索引的話,插入和修改會變慢,也是只做統計原因之一 用來查詢,如果量非常大,那麼分表,還是大,那麼分庫,就是資料倉儲概念了 2。關聯表查詢 多表聯合查詢 的大資料,首先就是1 把多個表做成乙個統計表,或者...

大資料量mysql檔案匯入程式

phymyadmin data importer www.ebugs.org 用來快速mysql的大資料備份 使用前請首先按照 注釋修改要匯入的sql檔名 資料庫主機名 資料庫使用者名稱 密碼 資料庫名 同時將資料庫檔案和本文本一起ftp導 目錄,然後以web方式訪問此檔案即可 file name ...