使用bash将csv文件数据读写到MySQL数据库的脚本之一_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="" pre=""></eof></eof></eof>
<eof 2=""><eof 2=""><eof delete="" from="" pre=""></eof></eof></eof>
<eof 2=""><eof 2=""><eof delete="" from="" pre=""><p> </p><p> <strong>脚本二、将数据插入数据表的脚本如下:</strong></p><p> </p><pre class="prebrush">#!/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 data="" echo="" eof="" insert="" into="" pre="" students="" wrote=""></eof>
<eof data="" echo="" eof="" insert="" into="" pre="" students="" wrote=""></eof>
<eof data="" echo="" eof="" insert="" into="" pre="" students="" wrote=""><p> </p><p> <strong>脚本三、查询数据库的脚本如下:</strong></p><p> </p><pre class="prebrush">#!/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 -n="" 2="" :="" by="" d="" department="" dept="" distinct="" do="" echo="" for="" from="" in="" mark="" order="" pre="" result="`mysql -u $USER -p$PASS -S $SOCKET students <<EOF SET @i:=0; select @i:=@i+1 as rank,name,mark from students where dept=" select="" tail=""></eof>
<eof -n="" 2="" :="" by="" d="" department="" dept="" distinct="" do="" echo="" for="" from="" in="" mark="" order="" pre="" result="`mysql -u $USER -p$PASS -S $SOCKET students <<EOF SET @i:=0; select @i:=@i+1 as rank,name,mark from students where dept=" select="" tail=""></eof>
<eof -n="" 2="" :="" by="" d="" department="" dept="" distinct="" do="" echo="" for="" from="" in="" mark="" order="" pre="" result="`mysql -u $USER -p$PASS -S $SOCKET students <<EOF SET @i:=0; select @i:=@i+1 as rank,name,mark from students where dept=" select="" tail=""><p> </p><p><strong>脚本按照顺序执行结果如下:</strong></p><p> </p><pre class="prebrush"># 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
<eof -n="" 2="" :="" by="" d="" department="" dept="" distinct="" do="" echo="" for="" from="" in="" mark="" order="" pre="" result="`mysql -u $USER -p$PASS -S $SOCKET students <<EOF SET @i:=0; select @i:=@i+1 as rank,name,mark from students where dept=" select="" tail=""></eof>
<eof -n="" 2="" :="" by="" d="" department="" dept="" distinct="" do="" echo="" for="" from="" in="" mark="" order="" pre="" result="`mysql -u $USER -p$PASS -S $SOCKET students <<EOF SET @i:=0; select @i:=@i+1 as rank,name,mark from students where dept=" select="" tail=""><p> </p><p> <strong>在MySQL数据库中确认插入后结果:</strong></p><p> </p><pre class="prebrush">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>

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题











Go语言是一种高效、简洁且易于学习的编程语言,因其在并发编程和网络编程方面的优势而备受开发者青睐。在实际开发中,数据库操作是不可或缺的一部分,本文将介绍如何使用Go语言实现数据库的增删改查操作。在Go语言中,我们通常使用第三方库来操作数据库,比如常用的sql包、gorm等。这里以sql包为例介绍如何实现数据库的增删改查操作。假设我们使用的是MySQL数据库。

苹果公司最新发布的iOS18、iPadOS18以及macOSSequoia系统为Photos应用增添了一项重要功能,旨在帮助用户轻松恢复因各种原因丢失或损坏的照片和视频。这项新功能在Photos应用的"工具"部分引入了一个名为"已恢复"的相册,当用户设备中存在未纳入其照片库的图片或视频时,该相册将自动显示。"已恢复"相册的出现为因数据库损坏、相机应用未正确保存至照片库或第三方应用管理照片库时照片和视频丢失提供了解决方案。用户只需简单几步

Hibernate多态映射可映射继承类到数据库,提供以下映射类型:joined-subclass:为子类创建单独表,包含父类所有列。table-per-class:为子类创建单独表,仅包含子类特有列。union-subclass:类似joined-subclass,但父类表联合所有子类列。

如何在PHP中使用MySQLi建立数据库连接:包含MySQLi扩展(require_once)创建连接函数(functionconnect_to_db)调用连接函数($conn=connect_to_db())执行查询($result=$conn->query())关闭连接($conn->close())

HTML无法直接读取数据库,但可以通过JavaScript和AJAX实现。其步骤包括建立数据库连接、发送查询、处理响应和更新页面。本文提供了利用JavaScript、AJAX和PHP来从MySQL数据库读取数据的实战示例,展示了如何在HTML页面中动态显示查询结果。该示例使用XMLHttpRequest建立数据库连接,发送查询并处理响应,从而将数据填充到页面元素中,实现了HTML读取数据库的功能。

PHP中处理数据库连接报错,可以使用以下步骤:使用mysqli_connect_errno()获取错误代码。使用mysqli_connect_error()获取错误消息。通过捕获并记录这些错误信息,可以轻松识别并解决数据库连接问题,确保应用程序的顺畅运行。

Go语言中使用os.Rename函数重命名文件,语法为:funcRename(oldpath,newpathstring)error。该函数将oldpath指定的文件重命名为newpath指定的文件。示例包括简单重命名、移动文件到不同目录以及忽略错误处理。Rename函数执行原子操作,在两个文件位于同一目录时可能仅更新目录项,跨卷或正在使用的文件重命名可能失败。

通过Go标准库database/sql包,可以连接到MySQL、PostgreSQL或SQLite等远程数据库:创建包含数据库连接信息的连接字符串。使用sql.Open()函数打开数据库连接。执行SQL查询和插入操作等数据库操作。使用defer关闭数据库连接以释放资源。
