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

情景:

有一个包含多个系的学生详细信息的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 <<EOF 2> /dev/null
create database students;
EOF
[ $? -eq 0 ] && echo Created DB || echo DB already exist
mysql -u $USER -p$PASS -S $SOCKET students <<EOF 2> /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 <<EOF
delete from students;
EOF

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

#!/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 <<EOF
insert into students values($query);
EOF
done< $data
echo Wrote data into DB

脚本三、查询数据库的脚本如下:

#!/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 <<EOF | tail -n +2
select distinct dept from students;
EOF`
for d in $depts;
do
echo Department : $d
result="`mysql -u $USER -p$PASS -S $SOCKET students <<EOF
SET @i:=0;
select @i:[email protected]+1 as rank,name,mark from students where dept="$d" order by mark desc;
EOF`"
echo "$result"
echo
done

脚本按照顺序执行结果如下:

# 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> 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>
时间: 2024-08-24 22:50:52

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

csv文件数据导出到mongo数据库

from pymongo import MongoClientimport csv# 创建连接MongoDB数据库函数def connection(): # 1:连接本地MongoDB数据库服务 conn=MongoClient("localhost",27017) # 2:连接本地数据库(guazidata).没有时会自动创建 db=conn.python # 3:创建集合 set1=db.data # 4:授权 db.authenticate(name='zhaochuan', p

csv文件的读写

最近在搞一个比赛,经常要用到csv文件的读写,开始用的是Java,有CsvReader.CsvWriter包,读写的格式大致如下: File inFile = new File(inpath); FileInputStream fis = new FileInputStream(inFile); FileOutputStream fos = new FileOutputStream(outpath); CsvReader csvReader = new CsvReader(fis, Charse

C语言进行csv文件数据的读取

C语言进行csv文件数据的读取: #include <stdio.h> #include <string.h> #include <malloc.h> #include <stdlib.h> #include <math.h> int main(){ FILE *fp = NULL; char *line,*record; char buffer[20450];//20450这个数组大小也要根据自己文件的列数进行相应修改. if((fp = fo

csv文件或者excel表格导入数据库

 将csv文件或者excel表格导入数据库的方法: Excel数据直接导入mysql会需要用到phpexcel开源类,详情使用可以参考这篇文章~ http://www.cnblogs.com/freespider/p/3284828.html 本文使用的方法是: Excel ——> CSV——>MySql 首先将excel另存为csv文件,然后开始分析数据. 代码如下: 1 <span style="font-size:18px;"><?PHP 2 //将

将 text 文件里的数据导入到 mysql 数据库中

如题,将 text 文件里的数据导入到 mysql 数据库中. 我自己具体的实现可以分为几种了: 1.写你擅长的程序设计语言 进行读写文件,然后连接数据库,进行写入: 2.在 mysql 里直接进行运行 sql 脚本语句,进行导入. 第一个现在就不再说了,简单. 现在就说说怎么直接将 .text 文件利用 sql 语句 进行导入. 1.首先在数据库中新建一个表(这里的表至少要和 你数据里的字段进行匹配,即一行存在的字段数): 2.运行sql脚本语句: 比如: 你的文件为 D:/field.txt

csv文件快速转存到mysql

目录 csv文件快速转存到mysql 连接数据库 读取csv文件内容: 创表: csv数据导入样式: 完整脚本: csv文件快速转存到mysql 连接数据库 连接数据库: con = pymysql.connect(user="root", passwd="root", db="test", host="47.95.xxx.xxx", local_infile=1) 将csv批量写到数据库,需要设置local_infile参数

Scrapy爬取慕课网(imooc)所有课程数据并存入MySQL数据库

爬取目标:使用scrapy爬取所有课程数据,分别为 1.课程名 2.课程简介 3.课程等级 4.学习人数 并存入MySQL数据库  (目标网址  http://www.imooc.com/course/list) 一.导出数据文件到本地 1.新建imooc项目 1 scrapy startproject imooc 2.修改 items.py,添加项目item 1 from scrapy import Item,Field 2 class ImoocItem(Item): 3 Course_na

「5-5」码农商城实现商品数据提交到Mysql数据库

访问不了Youtube?1.点击搭建自己的ss并开启bbr快速上网教程轻松访问1080p高清Youtube视频.2.点击本节b站视频教程地址观看. 我们之前已经通过逆向工程获取到了 Product 这个实体类,那么我们在提交表单数据的时候,我们的标签 name 值需要和属性值对应起来. 123456789 private Integer id;private Short categoryId;private String name;private String image;private Lon

2019年最新全国省市区街道共46462条数据(统计局MySQL数据库)

2019年最新全国省市区街道共46462条数据(统计局MySQL数据库) 查看百度网盘: 看到有很多朋友没有积分,很理解找资源费时间的心情,现已上传到百度云盘,直接下载 https://pan.baidu.com/s/1fDeEp5C-WGx-6Z1xPDjwGg 提取码:9ki4 只求给文章点个赞,让更多需要的人看到 原文地址:https://www.cnblogs.com/hfultrastrong/p/12689724.html