シェルスクリプトで大量データのcsvファイル作成!!!


はじめに

テストで大量データのcsvファイルを作る必要があったので調べてみた結果と、shellのforループとawkどっちが早いのって疑問に思ったのでそれらの結果をQiitaに投稿しました。

結論

awk はやいぃぃぃぃぃーーーーーーーー!!!

結果

作成方法 処理時間
シェルスクリプト 357秒
awk 4秒

検証した環境

M1 Mac Book Air
CPU : 8 コア
GPU : 7 コア

のモデルです。

使用したコード

シェルスクリプト

test.sh

#!/bim/bash

echo "No,hoge1,hogehoge,piyo,normalID,終了日時,開始日時" >> /Users/username/Desktop/test_1M_by_shell.csv

NO="0"
HOGE1="TEST001"
HOGEHOGE="a"
PIYO="AB9999"
TIME_S="20210824180000"
TIME_F="20210824200000"

for i in `seq 1 1000000`;
do
    NORMALID=$(printf "%020d",${i})
    echo "\"${NO}\",\"${HOGE1}\",\"${HOGEHOGE}\",\"${PIYO}\",\"${NORMALID}\",\"${TIME_S}\",\"${TIME_F}\"" >> /Users/username/Desktop/test_1M_by_shell.csv
done

test.awk

BEGIN {
    printf("No,hoge1,hogehoge,piyo,終了日時,開始日時\n");
    for(i=0;i<1000000;i++){
        printf("\"0\",\"TEST01\",\"a\",\"AB9999\",\"20210824180000\",\"20210824200000\"\n");
    }
}

  • awk 実行するコマンド

awk -f test.awk > /Users/username/Desktop/test_1M_by_awk.csv