shell join 实现 sql Select 语句

缘由:

  最近 接到一个 任务 从技术上 来说 就是 将 两个表 通过 一个 字段 链接起来。 

一个sql 语句 就可以搞定。 select * from a,b where a.id = b.id;

但是 两个表 一个在 mysql 里,一个在 mongoDB 里,无奈 只好 导出 相关 信息 通过 shell 语句  实现 一个 批处理。


Join 命令

而 linux 的 join 命令 正是 恰到好处。它通过 两个文件的 相同字段 进行 链接,从而 实现 类似 mysql 的 select 语句。


使用 join 命令 之前,需将 两个文件 进行排序。这样做是为了效率。假设M,N 为 文件的行数,不排序 时间复杂度O(M*N),排序 时间 复杂度为 O(M+N) 和 排序的时间复杂度 为

O(N*logN) 。 所以 肯定是 先排序,更加 有效率。


举例:

举例:创建文件发file1和file2内容如下:
file1:

1 aaaaaaaa
2 bbbbbbbb
3 cccccccccc

  file2:

1 1111111111
2 2222222222


1.将两个文件 内容相同的行连接起来

$join file1 file2
1 aaaaaaaa 1111111111
2 bbbbbbbb 2222222222



$join file2 file1
1 1111111111 aaaaaaaa
2 2222222222 bbbbbbbb

 

shell 语句:

#!/bin/sh
cd  ~/payData
mongoexport -d heli_us -c guests -o  mongo.txt
cat mongo.txt | awk -F ','  '{print $4":"$6}' | awk -F ':' '{print $4" "$2}'   > account.txt
connect-db < pay > pay.txt
sort pay.txt -o pay.txt
sort account.txt -o account.txt
join pay.txt account.txt > userPay.txt 
##cat userPay.txt | awk 'BEGIN {print "return {" } {printf ("\t[%s]\t = %d,\n",$4,$3) } END {print "}"}' > payInfo.lua   ## to lua file
cat userPay.txt | awk 'BEGIN {print "begin;" } {printf ("insert into activityPay values (%s,%d);\n",$4,$3) } END {print "commit;"}' > insertPay.sql
connect-db < insertPay.sql  > ERROR.log
rm mongo.txt
mv pay.txt  pay_Temp.txt
mv account.txt account_Temp.txt
echo "complete"


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值