目的
ファイル転送速度測定やDBへのロード時間測定など、比較的サイズの大きいCSVが必要になった時に、任意のサイズ(GB)のCSVを容易に作成すること。
スクリプト
create_csv.sh
#!/bin/sh
##実行時の引数の数をチェック。引数が1じゃない場合、Usageを表示。
if [ $# -ne 1 ]; then
echo "Usage: $(basename ${0}) [size(GB)]"
exit 1
fi
##filesizeに実行時の引数であるファイルサイズ(GB)を入力する。
filesize=$1
##引数が整数であることを確認する。引数が整数ではない場合、Usageを表示する。
expr ${filesize} + 1 >/dev/null 2>&1
RET=$?
if [ $RET -lt 2 ]; then
echo ${filesize}"GB file will be created."
else
echo "Usage: $(basename ${0}) [size(GB)]"
exit 1
fi
##作成するファイルサイズから必要なレコード数を計算する。
num_records=`expr ${filesize} "*" 1024 "*" 1024 "*" 1024 / 10`
##必要な分のレコードをファイルに書き込む。
for (( i=0; i<${num_records}; i++ ))
do
echo 123456789 >> test.csv
done
考慮できてないところ
- 1GB以下のファイル作成
- 引数に少数を利用
- 一行あたりのバイト数によっては行数が膨大になること。今回は書くのがめんどくさいので省略するが、ファイル入力の123456789のところは実際4000バイト程度のカンマ区切り文字列を入れている。(num_recordsの最後の10を4000に変更。)