在awk中通过system调用sql语句来说明引号的使用
一个实际应用例子: 在awk中,通过system调用连接数据库并作select操作,select语句中where条件来自于一个文件(file)的第一个域($1)。
$ cat file
... ...
1. 用awk实现:
awk '{system("mysql -u root -proot mydatabase -Bse \"select id,name from tables where id=""\047"$1"\047""\042")}' file
为什么类似上面的语句可以达到目的呢?首先,我们来将这个语句进行详细分解,因为有这么多引号和转义符,看起来确实很让人头大。直接看system语句的内容(说明:为了看得更清楚,将由双引号分隔的子字符串以空格和回车符分开。):
"mysql -u root -proot mydatabase -Bse \"select id,name from tables where id="
"\047"
$
"\047"
"\042"
解释:\047和\042分别为单引号和双引号的转义符号(可以在shell终端通过echo -ne “\047″和echo -ne “\042″输出看它们代表的字符),相匹配的引号以相同的颜色进行标记。\” 与 \042 配对,\047 与 \047 配对,然后将这5个部分拼接起来就构成一个完整的语句。
2. 该语句也可以写成:
awk '{system("mysql -u root -proot mydatabase -Bse \"select id,name from tables where id='\''"$1"'\''\"")}' file
引号分解:
awk '{system( "...id= ' \' ' " $1 " ' \' ' \" " )}' file
#^最外层的引号(无论是单引号或双引号),是shell解释的,shell将引号内的内容当成一个不可拆分的整体,去掉最外层引号后传给awk,多双引号连在一起,中间无空格,仍作为1个位置参数传给awk
#^关了单引号,好让\'传给awk一个转义的'
#^开单引号
#^关了双引号,好引用$
#^awk system参数的前双引号
#^shell的外层后单引号,目的是要传一个转义单引号给awk
#^shell转义单引号给awk,前后不能空,空了awk程序就断开了
#^shell解释的外层前单引号,前面不能空
#^传给子进程shell的双引号,前后可空
#^awk后双引号,前面可空
3. 将sql语句的结果存储为一个awk变量
export dbfile=./freepbx.db # 定义shell变量,freepbx.db为freepbx的sqlite3数据库文件
echo | awk '{var=1000;("sqlite3 '$dbfile' \"select name,sipname from users where extension="var"\"") | getline data;print data }'
#引号分解:
echo | awk '{var=1000;("sqlite3 '$dbfile' \"select ... extension="var" \" ") | getline data;print data }' #^最外层,由shell解释 #^调用shell执行括号内的命令,去掉括号会报错:/bin/sh: -c: 行 : 寻找匹配的 `"' 是遇到了未预期的文件结束符;/bin/sh: -c: 行 1: 语法错误: 未预期的文件结尾 #^关闭单引号,传递shell变量 #^打开单引号 #^关闭双引号,传递awk变量 #^开双引号 #^关闭双引号
在awk中通过system调用sql语句来说明引号的使用的更多相关文章
- Entity FrameWork 5 增删改查 & 直接调用sql语句 ?
#region 1.0 新增 -void Add() /// <summary> /// 1.0 新增 /// </summary> static void Add() { / ...
- 如何查找MySQL中查询慢的SQL语句
如何查找MySQL中查询慢的SQL语句 更多 如何在mysql查找效率慢的SQL语句呢?这可能是困然很多人的一个问题,MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,用--log-slow ...
- 第七节:EF Core调用SQL语句和存储过程
一. 查询类(FromSql) 1.说明 A. SQL查询必须返回实体的所有属性字段. B. 结果集中的列名必须与属性映射到的列名相匹配. C. SQL查询不能包含关联数据 D. 除Select以为的 ...
- sqlserver中查询表字段的sql语句
sqlserver中的表信息字段信息这些东西也是放到系统表中的,以下sql语句用于查询某表的字段信息. select t1.id object_id,t1.name object_name,t2.va ...
- Mysql中 查询慢的 Sql语句的记录查找
Mysql中 查询慢的 Sql语句的记录查找 慢查询日志 slow_query_log,是用来记录查询比较慢的sql语句,通过查询日志来查找哪条sql语句比较慢,这样可以对比较慢的sql可以进行优化. ...
- Springboot中mybatis控制台打印sql语句
Springboot中mybatis控制台打印sql语句 https://www.jianshu.com/p/3cfe5f6e9174 https://www.jianshu.com/go-wild? ...
- 在Access中批量调用SQL语句
access的SQL视图一次只能执行一条SQL语句,那么在VBA中调用或许可以简便一些 例如: Public Sub 批量()Dim strsql As String strsql = " ...
- Entity FrameWork 5 增删改查 & 直接调用sql语句
class="brush:csharp;gutter:true;"> #region 1.0 新增 -void Add() /// <summary> /// 1 ...
- Java将文件中的内容转换为sql语句(和并发定时读取文件)
数据文件内容data.txt {USER_TYPE=1,CREATE_USER=ZHANG,UPDATE_USER=li,OPER_NUM=D001,SRC=2,UPDATE_TIME=2018-11 ...
随机推荐
- Node.js(daemon),tweak(debug ES)/nodejs forever,supervisor--express
http://www.cnblogs.com/Darren_code/p/node_express.html express -e nodejs-product sudo npm install fo ...
- 【aws】
云服务器EC2 动态调整云服务器ec2 cpu.内存大小: 在ec2实例上右键,Instance settings--> Change Instance Type 选择一个合适的type 云数据 ...
- Pots--poj(bfs,输出路径)
http://poj.org/problem?id=3414 题意: 给你两个容量为a,b的杯子:有3个操作: 1:FILL(i):把第i个杯子从水库中装满: 2:DROP(i):把第i个杯子清空: ...
- kubernetes实战(十六):k8s高可用集群平滑升级 v1.11.x 到v1.12.x
1.基本概念 升级之后所有的containers会重启,因为hash值会变. 不可跨版本升级. 2.升级Master节点 当前版本 [root@k8s-master01 ~]# kubeadm ver ...
- sql执行顺序与性能优化小技巧(一)
关于sql条件匹配对执行效率影响测试 首先,创建一个标量函数create function ff_test() returns int as begin declare @i int=0 while( ...
- ssh stricthostkeychecking=0
SSH 公钥检查是一个重要的安全机制,可以防范中间人劫持等黑客攻击. 但是在特定情况下,严格的 SSH 公钥检查会破坏一些依赖 SSH 协议的自动化任务,就需要一种手段能够绕过 SSH 的公钥检查. ...
- 查询mysql事务隔离级别
查询mysql事务隔离级别 查询mysql事务隔离级别 分类: DB2011-11-26 13:12 2517人阅读 评论(0) 收藏 举报 mysqlsessionjava 1.查看当前会话隔离 ...
- 如何快速获取ListView的打气筒对象
简单的方式有三种: @Override public View getView(int position, View convertView, ViewGroup parent) { View vie ...
- Javascript--普通函数调用-涨工资计算函数
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- PKU2503_map应用
Description You have just moved from Waterloo to a big city. The people here speak an incomprehensib ...