sed+awk模拟简单sql查询(26天)
公众号:杨建荣的学习笔记 · 作者:笔记26天 · 发布:2014-03-29 11:26:36 · 原文链接
经常需要用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
