sed+awk模拟简单sql查询

作者: admin 分类: 公众号存档,运维与自动化            0 次浏览 发布时间: 2013-09-22 15:00

经常需要用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

📌 本文来自作者的 ITPUB 技术博客存档(2013 年),原文链接:https://blog.itpub.net/23718752/viewspace-772975/

admin

杨建荣,《Oracle DBA工作笔记》《MySQL DBA工作笔记》作者,dbaplus社群发起人之一,腾讯云TVP,现任竞技世界系统部经理,拥有十多年数据库开发和运维经验,目前专注于开源技术、运维自动化和性能调优

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注