[shell script] csv 파일의 내용을 가지고 SQL 쿼리 작성하기

HYEOB KIM·2022년 4월 26일

Shell

목록 보기
54/71

.csv 파일은 스프레드시트에서 데이터를 내보낼 때 사용하는 파일 형식입니다.

아래와 같은 유저 데이터 csv 파일이 있습니다.

$ cat users.csv
rich, Richard Blum, address1, Goyang, 60000
christine, Christine Bresnahan, address2, Seongnam, 60001
barbara, Barbara Blum, address3, Seoul, 60002
tim, Timothy Bresnahan, address4, Guri, 60003

이 csv의 유저 데이터를 가지고 MySQL 데이터베이스에 레코드를 삽입하는 INSERT 쿼리를 작성해서 .sql 파일로 저장하는 예제를 수행해 보겠습니다.

$ cat csvtosql
#!/bin/bash

outfile="users.sql"
IFS=','

if [ -n "$1" ]
then
        while read cname name address city zip
        do
                cat >> $outfile << EOF
INSERT INTO users (cname,name,address,city,zip) VALUES ('$cname','$name','$address','$city','$zip');
EOF
        done < $1
else
        echo "Needed .csv file..."
fi

$ ./csvtosql
Needed .csv file...

$ ./csvtosql users.csv

$ cat users.sql
INSERT INTO users (cname,name,address,city,zip) VALUES ('rich',' Richard Blum',' address1',' Goyang',' 60000');
INSERT INTO users (cname,name,address,city,zip) VALUES ('christine',' Christine Bresnahan',' address2',' Seongnam',' 60001');
INSERT INTO users (cname,name,address,city,zip) VALUES ('barbara',' Barbara Blum',' address3',' Seoul',' 60002');
INSERT INTO users (cname,name,address,city,zip) VALUES ('tim',' Timothy Bresnahan',' address4',' Guri',' 60003');

코드 리뷰

  • outfile="users.sql" : users.sql 파일에 INSERT 쿼리를 저장합니다.
  • IFS=',' : users.csv 파일은 ,를 기준으로 구분되어 있으므로 필드 구분자를 ,로 지정합니다.
  • if [ -n "$1" ] : 파라미터로 반드시 .csv 파일을 받게 되어 있기 때문에 파라미터를 주지 않을 시 예외처리 구문입니다.
  • cat >> $outfile << EOF : users.sql 파일에 EOF가 나올때 까지의 내용을 저장합니다.
  • done < $1 : 파라미터 .csv 파일의 내용을 입력 받습니다.
profile
Devops Engineer

0개의 댓글