首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >sed+awk模拟简单sql查询(26天)

sed+awk模拟简单sql查询(26天)

作者头像
jeanron100
发布2018-03-13 17:37:46
6150
发布2018-03-13 17:37:46
举报

经常需要用sqlplus去查询一些数据字典类型的数据,这些数据量不大,而且需要环境之间都是一样的,所以就想使用离线查询的方式,把那些数据以平面文件的形式存放,然后通过系统级的操作来输出。以下使用 sed 和awk来实现。还有很多很多需要改进的地方,就当做是抛砖引用了

1.数据量极小的行级筛选

.....

echo 'MODU CC_VERSION           MODULE_VERSION       PROJ_NAME
---- -------------------- -------------------- ------------------------------'
data_path=`pwd`/data
data_file=${data_path}/ccmodule.data   --数据通过sqlplus spool 到这个文件中
sed -n "/$1/p"  $data_file|uniq

输出结果如下:

MODU CC_VERSION           MODULE_VERSION       DEV_PATH
---- -------------------- -------------------- ------------------------------
MO1        550                                   550                 devpath1
MO2        550                                   550                  devpath2
MO3        550                                   550                  devpath3
MO4        550                                   550                  devpath4

--因为这个数据量极小,而且数据行内的数据分布很有规律,所以我用了sed做了行级操作

2.多重查询条件

类似数据库查询中的 and or条件

......
cc_module=`echo $2|tr [[:lower:]] [[:upper:]]`
data_path=`pwd`/data
data_file=${data_path}/ccobj.data  --数据通过sqlplus spool 到这个文件中
echo 'MODU OBJECT OBJECT_NAME                    DB_AREA_CODE    VERSION
---- ------ ------------------------------ --------------- --------------------'
cat  $data_file |awk '
BEGIN{
cc_version="'$1'"
cc_module="'$cc_module'"
cc_index=1
}
{
if ($1== cc_module && $5 == cc_version)    --组合查询条件,and/or。。。
{
print cc_index,$0
cc_index=cc_index+1
}
}'
--查询结果如下
MODU OBJECT OBJECT_NAME                    DB_AREA_CODE    VERSION
---- ------ ------------------------------ --------------- --------------------
1 MO1  app       MO1_TAB1                          DB_AREA1                       550
2 MO1   app      MO1_TAB2                          DB_AREA2                        550

3.动态模糊匹配

类似数据中的Like 匹配

.......
obj_name=`echo $2|tr [[:lower:]] [[:upper:]]`
data_path=`pwd`/data
data_file=${data_path}/ccobj.data
echo 'MODU OBJECT OBJECT_NAME                    DB_AREA_CODE    VERSION
---- ------ ------------------------------ --------------- --------------------'
cat  $data_file |awk '
BEGIN{
cc_version="'$1'"
obj_name="'$obj_name'"
cc_index=1
}
{
if ($3~obj_name && $5 == cc_version)  --动态模糊匹配
{
print cc_index,$0
cc_index=cc_index+1
}
}'

输出结果如下:

MODU OBJECT OBJECT_NAME                    DB_AREA_CODE    VERSION
---- ------ ------------------------------ --------------- --------------------
1 MO1 DUMMY  MO1_TAB1                           DUMMY                         550
2 MO2 DUMMY  MO1_TAB2                           DUMMY                         550
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2014-03-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档