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

HYEOB KIM·2022년 4월 26일
0

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개의 댓글