利用awk命令批量插入数据库
来源:互联网 发布:java找不到或无法加载 编辑:程序博客网 时间:2024/06/02 11:47
awk命令是一个非常强大的命令,在此我记录一下工作中遇到的一个问题。有一个文件,我这里的文件叫做test_case_name_trimmed.txt,里面存放着test_case_name,每一行是一个case的名字,一共有100行左右,如何将这些数据一次性的插入一个数据库的表中呢。数据库的表的结构如下:
mysql> desc page;+----------------+-------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+----------------+-------------+------+-----+---------+----------------+| id | int(100) | NO | PRI | NULL | auto_increment || test_case_name | varchar(32) | YES | UNI | NULL | |+----------------+-------------+------+-----+---------+----------------+
最直观的想法是如何将这些数据组成正确合法的sql命令,将这些命令放到一个sql文件中,我这里放到了一个insert.sql的文件中,然后调用source insert.sql将数据批量地插入到数据库的表中。
我最开始的想法是通过sed来实现这个功能,以下是我实现的步骤:
sed 's/^/insert page(id,test_case_name) values("/g' test_case_name_trimmed.txt | sed 's/$/")/g'这个结果和最终的合法的sql命令已经很接近了,但是有一个问题是它无法插入id,也就是每一行的1,2,3...。因为sed中好像没有哪个变量可以用来表示当前行所在的行数。这让我开始想到了awk,awk中不是恰好有一个变量NR来表示当前所处理行的行数吗?NR就是number of record的记录。于是开始利用awk来实现我的想法。最终的命令行如下:
awk '{print "insert into page(id, test_case_name) values("NR",", "'\''"$1"'\''"")"}' test_case_name_trimmed.txt这中间比较有点麻烦的是利用awk来输出单引号或是双引号。自己试了一些方法没有解决,后来终于在网上找到了答案。输出双引号的方法:“\“”,先是两个双引号括住一个双引号,然后再在中间括住的双引号前加反斜杠符号\。输出单引号的方法较输出双引号稍微有些复杂,输出单引号的方法如下:”‘\’'“,最外层是两个双引号,然后中间是三个单引号,其中第一二个单引号中间有一个反斜杠符号\,这个反斜杠符号是对第三个单引号进行转义的,不至于让awk以为这个单引号是命令的结尾。第一二个单引号的作用就是括住反斜杠符号,第三个单引号才是最终要输出的单引号。
0 0
- 利用awk命令批量插入数据库
- 利用Ibatis执行批量插入更新数据库操作
- 利用JSON数据批量操作数据库(插入、更新)
- 利用mysql存储过程向数据库批量插入数据
- 利用oracle存储过程向数据库批量插入数据
- DataTable 批量插入数据库
- DataTable批量插入数据库
- Bulk 批量插入数据库
- 批量插入oracle数据库
- DataTable批量插入数据库
- DataTable批量插入数据库 .
- jdbc批量插入数据库
- 数据库批量插入
- 1.数据库批量插入
- 数据库批量插入
- 数据库批量插入数据
- java 数据库批量插入
- 批量插入数据库
- Docker简要教程
- 我的程序员未婚夫
- HTTP 断点续传
- ETL流程概述及常用实现方法
- 查看进程启动参数
- 利用awk命令批量插入数据库
- Android下Json文件解析
- 4Sum
- PAT Advanced 1023
- WinToFlash
- 为什么前端工程师很难找?(最近很火的一个话题)
- 二叉树前序、中序、后序遍历相互求法
- extern”C” _cdecl
- select嵌套,可以使用父select的每行做判断