您好,欢迎访问一九零五行业门户网

使用bash将csv文件数据读写到MySQL数据库的脚本之一_MySQL

情景:
有一个包含多个系的学生详细信息的csv文件,需要将文件的内容插入到一个数据表中,保证每一个系生成一个单独的排名列表。
学习信息表 studentdata.csv 文件的数据如下:
1,navin m,98,cs2,kavya n,70,cs3,nawaz o,80,cs4,hari s,80,ec5,alex m,50,ec6,neenu j,70,ec7,bob a,30,ec8,anu m,90,ae9,sruthi,89,ae10,andrew,89,ae
脚本思路
这个问题有两种处理思路,从shell脚本的角度看,可以用sort,awk等bash工具解决,也可以用一个sql数据库的数据表也可以解决。
下面需要编写3个脚本,分别用于创建数据库及数据表、想数据表中插入学生数据、从数据表中读取并显示处理过的数据。
注意:下面脚本中mysql数据连接的user,pass,socket等变量是我测试环境中的连接,在使用脚本时可以根据情况修改;
另外对于实际导入的csv格式和行数不同,可以对照进行脚本中的数据库名、表名、列名进行修改,这样这三个脚本就可以解决这一类问题了。
脚本一、创建数据库及数据表的脚本如下:
#!/bin/bash#filename : create_db.sh#use : create mysql database and tablesuser=rootpass=123456socket=/data/mysqldata/3306/mysql.sockmysql -u $user -p$pass -s $socket < /dev/nullcreate database students;eof[ $? -eq 0 ] && echo created db || echo db already existmysql -u $user -p$pass -s $socket students < /dev/nullcreate table students(id int,name varchar(100),mark int,dept varchar(4));eof[ $? -eq 0 ] && echo created table students || echo table students already existmysql -u $user -p$pass -s $socket students <

脚本二、将数据插入数据表的脚本如下:
#!/bin/bash#filename : write_to_db.sh#use : read data from csv files and insert into mysql dbuser=rootpass=123456socket=/data/mysqldata/3306/mysql.sockif [ $# -ne 1 ];then echo $0 datafile echo exit 2fidata=$1while read line;do oldifs=$ifs ifs=, values=($line) values[1]=\`echo ${values[1]} | tr ' ' '#' `\ values[3]=\`echo ${values[3]}`\ query=`echo ${values[@]} | tr ' #' ', ' ` ifs=$oldifs mysql -u $user -p$pass -s $socket students <

脚本三、查询数据库的脚本如下:
#!/bin/bash#filename: read_db.sh#use : read data from mysql dbuser=rootpass=123456socket=/data/mysqldata/3306/mysql.sockdepts=`mysql -u $user -p$pass -s $socket students <
脚本按照顺序执行结果如下:
# chmod +x create_db.sh write_to_db.sh read_db.sh# ./create_db.sh db already existtable students already exist# # ./write_to_db.sh studentdata.csv wrote data into db# # ./read_db.sh department : csrank name mark1 navin m 982 nawaz o 803 kavya n 70department : ecrank name mark1 hari s 802 neenu j 703 alex m 504 bob a 30department : aerank name mark1 anu m 902 sruthi 893 andrew 89



show databases;+--------------------+| database |+--------------------+| information_schema || mysql || performance_schema || students || test |+--------------------+5 rows in set (0.00 sec)mysql> mysql> use students;reading table information for completion of table and column namesyou can turn off this feature to get a quicker startup with -adatabase changedmysql> mysql> show tables;+--------------------+| tables_in_students |+--------------------+| students |+--------------------+1 row in set (0.00 sec)mysql> mysql> select * from students;+------+---------+------+------+| id | name | mark | dept |+------+---------+------+------+| 1 | navin m | 98 | cs || 2 | kavya n | 70 | cs || 3 | nawaz o | 80 | cs || 4 | hari s | 80 | ec || 5 | alex m | 50 | ec || 6 | neenu j | 70 | ec || 7 | bob a | 30 | ec || 8 | anu m | 90 | ae || 9 | sruthi | 89 | ae || 10 | andrew | 89 | ae |+------+---------+------+------+10 rows in set (0.00 sec)mysql>


其它类似信息

推荐信息