最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:懂视网 责编:小采 时间:2020-11-09 20:07:15
文档

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

使用bash将csv文件数据读写到MySQL数据库的脚本之一_MySQL:  情景: 有一个包含多个系的学生详细信息的csv文件,需要将文件的内容插入到一个数据表中,保证每一个系生成一个单独的排名列表。 学习信息表 studentdata.csv 文件的数据如下: 1,Navin M,98,CS 2,Kavya N,70,
推荐度:
导读使用bash将csv文件数据读写到MySQL数据库的脚本之一_MySQL:  情景: 有一个包含多个系的学生详细信息的csv文件,需要将文件的内容插入到一个数据表中,保证每一个系生成一个单独的排名列表。 学习信息表 studentdata.csv 文件的数据如下: 1,Navin M,98,CS 2,Kavya N,70,

情景:
有一个包含多个系的学生详细信息的csv文件,需要将文件的内容插入到一个数据表中,保证每一个系生成一个单独的排名列表。

学习信息表 studentdata.csv 文件的数据如下:

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


脚本思路
这个问题有两种处理思路,从shell脚本的角度看,可以用sort,awk等bash工具解决,也可以用一个sql数据库的数据表也可以解决。
下面需要编写3个脚本,分别用于创建数据库及数据表、想数据表中插入学生数据、从数据表中读取并显示处理过的数据。

注意:下面脚本中mysql数据连接的user,pass,socket等变量是我测试环境中的连接,在使用脚本时可以根据情况修改;
另外对于实际导入的csv格式和行数不同,可以对照进行脚本中的数据库名、表名、列名进行修改,这样这三个脚本就可以解决这一类问题了。


脚本一、创建数据库及数据表的脚本如下:

#!/bin/bash
#filename : create_db.sh
#use : create mysql database and tables

USER="root"
PASS="123456"
SOCKET="/data/mysqldata/3306/mysql.sock"

mysql -u $USER -p$PASS -S $SOCKET < /dev/null
create database students;
EOF

[ $? -eq 0 ] && echo Created DB || echo DB already exist
mysql -u $USER -p$PASS -S $SOCKET students < /dev/null
create table students(
id int,
name varchar(100),
mark int,
dept varchar(4)
);
EOF

[ $? -eq 0 ] && echo Created table students || echo Table students already exist

mysql -u $USER -p$PASS -S $SOCKET students <

脚本二、将数据插入数据表的脚本如下:

#!/bin/bash
#filename : write_to_db.sh
#use : read data from csv files and insert into mysql db

USER="root"
PASS="123456"
SOCKET="/data/mysqldata/3306/mysql.sock"

if [ $# -ne 1 ];
then
 echo $0 DATAFILE
 echo
 exit 2
fi
data=$1

while 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 db

USER="root"
PASS="123456"
SOCKET="/data/mysqldata/3306/mysql.sock"

depts=`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 exist
Table students already exist
# 
# ./write_to_db.sh studentdata.csv 
Wrote data into DB
# 
# ./read_db.sh 
Department : CS
rank name mark
1 Navin M 98
2 Nawaz O 80
3 Kavya N 70

Department : EC
rank name mark
1 Hari S 80
2 Neenu J 70
3 Alex M 50
4 Bob A 30

Department : AE
rank name mark
1 Anu M 90
2 Sruthi 89
3 Andrew 89

在MySQL数据库中确认插入后结果:

mysql> 
mysql> 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 names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> 
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> 

文档

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

使用bash将csv文件数据读写到MySQL数据库的脚本之一_MySQL:  情景: 有一个包含多个系的学生详细信息的csv文件,需要将文件的内容插入到一个数据表中,保证每一个系生成一个单独的排名列表。 学习信息表 studentdata.csv 文件的数据如下: 1,Navin M,98,CS 2,Kavya N,70,
推荐度:
标签: 文件 数据库 脚本
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top