shell中join链接多个域_shell 如何实现两个表的join操作
shell 如何实现两个表的join操作
今天研究的一个问题是:在Shell 脚本中如何实现两个表的 join 操作,这里说的两个表示的其实是
两个文件,但是文件是列表的形式,有固定的分割符号,即就相当于hive中一个非分区表的文件。
表的操作当然是在数据库中操作是最好的: 比如有: table1 table2,我们需要根据 column1 主键关联
select * from table1 a table2 b where a.column1 = b.column1
搞定。如果需要复杂一点的,可以用 join 操作实现。
但是如果你手上刚好有两个文件呢?一种办法是导入数据库,这样太慢了,下面用shell命令实现。
数据样例
假设 table1.txt 文件的样例数据如下:
daacdaaedyWcMIV= http://mp.weixin.qq.com/s?__biz=daacdaaedyWcMIV=&mid=200664912&idx=1&sn=c3fbe92847655211faf109c6856f4c0a
daacddeMdcedauY= http://mp.weixin.qq.com/s?__biz=daacddeMdcedauY=&mid=200435227&idx=1&sn=a8802c19dacf0b2db6462eaec09c0b19
daacddeVdeaudaY= http://mp.weixin.qq.com/s?__biz=daacddeVdeaudaY=&mid=200668153&idx=1&sn=869b00b38caa70de6c32848f396b8aa6
daacdduydVWyeMM= http://mp.weixin.qq.com/s?__biz=daacdduydVWyeMM=&mid=200659749&idx=1&sn=6fe9107dd69dd3b5de32bf6e5597a408
daacdeMddMMyVWw= http://mp.weixin.qq.com/s?__biz=daacdeMddMMyVWw=&mid=200912280&idx=7&sn=a70041d29f6b4ad06554ea97291d06bc
daacdMcadMMyduV= http://mp.weixin.qq.com/s?__biz=daacdMcadMMyduV=&mid=200654058&idx=3&sn=a6e57a52b1bd9c38f392825da34b499d
daacdudVdIecyMY= http://mp.weixin.qq.com/s?__biz=daacdudVdIecyMY=&mid=200382730&idx=4&sn=aeed567f2ad4ee595846623f7e2c8fbf
daacduyudeVeWdv= http://mp.weixin.qq.com/s?__biz=daacduyudeVeWdv=&mid=200468183&idx=1&sn=df3d20eef948571d3120b74416b9b010
daacdycIdWdyaIV= http://mp.weixin.qq.com/s?__biz=daacdycIdWdyaIV=&mid=200839908&idx=8&sn=40eb71efc2e70a779af0fc782ac78c47
daacdyIydayccyV= http://mp.weixin.qq.com/s?__biz=daacdyIydayccyV=&mid=200303209&idx=1&sn=63fbd789967812b16ff71b3667d36095```
table2.txt 文件的样例数据如下:
MjM5MDQ3MDIyMg==
MjM5MDU2OTI4OQ==
MjM5MDc5MTk2NQ==
MjM5MDg5MDE2Nw==
MjM5MDk3NDQ4Mw==
MjM5MTA4MTEyNQ==
MjM5MTQwMzcwMA==
MjM5MjEwMjkyMA==
MjM5MjM2ODU5Nw==
MjM5MjMxOTYxMw==
下面的任务就是要找出table1.txt中所有主键存在于table2.txt中的记录,文件的主键都是第一列
shell命令
awk -F'\t' ' {if (ARGIND==1) ccc[$1]} {if (ARGIND>1 && ($1 in ccc)) print $0} ' test2.txt test1.txt > test.txt
命令解释:
awk -F 表示字段分割符号
接下来是命令,命令必须用单引号包围,双引号不行。
ARGIND == 1表示读取到第一个文件,就把第一列存入数组ccc
当读到其他文件,这里就是第二个文件,就判断它的第一列是否在数组中,在就输出。
结束语
为什么选择用shell命令实现这个功能呢?我发现我数据量在一个文件700m,另一个文件30m的情况下,
只需要一分钟出结果,不必数据库慢很多,比其他工具,如R语言快太多,R语言还可能跑不了,
数据分析工作者适当的掌握几个有用的shell工具,如grep、awk、goin等,事半功倍。
shell中join链接多个域_shell 如何实现两个表的join操作相关推荐
- mysql比对表中数据是否相同_如何用sql比较两张表数据是否一致?
在批量程序的测试中,经常会涉及到对数据库表的测试,今天我们来介绍一下用sql比较两张表结构相同的表数据是否完全一致的方法. 1.inner join 浅尝 提到比对两张表的数据是否完全相同,很容易想到 ...
- shell中join链接多个域_Linux Shell中使用awk完成两个文件的关联Join
Shell中的awk命令是非常强大的,有很多书籍专门介绍awk的.本文介绍的只是其中很小的一个点,使用awk命令完成两个文件的关联join. 先看看awk中的两个自身变量,NR和FNR. awk可以指 ...
- shell中文件路径用变量定义_shell学习笔记01(概述amp;变量)
Shell概述 为什么要学习Shell呢? 因为有用. Shell脚本入门 1.脚本格式 脚本以#!/bin/bash开头(指定解析器) 2.第一个Shell脚本:helloworld (1)需求:创 ...
- spark做两张大表的join操作,mapPartition和重分区算子的使用策略
Spark中做两个大hive表的join操作,先读取过来处理成两个数据量很大的RDD,如果两个RDD直接进行join操作,势必会造成shuffle等导致运行非常缓慢,那么怎么优化呢?方法如下: 首先, ...
- linux系统冒号模式map怎么用,shell中冒号 : 用途说明
我们知道,在Linux系统中,冒号(:)常用来做路径的分隔符(PATH),数据字段的分隔符(/etc/passwd)等.其实,冒号(:)在Bash中也是一个内建命令,它啥也不做,是个空命令.只起到占一 ...
- SCMS中的链接值算法(CCSA版本)
背景 为了以最小的空间开销实现PC证书的撤销,SCMS采用了链接值算法来生成PC证书中的CN字段: 用一个种子ls(0)ls(0)ls(0)扩展生成某设备指定周期iii的链接值种子ls(i)ls(i) ...
- hive分桶表join_Hive:JOIN及JOIN优化 2015.10.25
1. Join的基本原理 大家都知道,Hive会将所有的SQL查询转化为Map/Reduce作业运行于Hadoop集群之上.在这里简要介绍Hive将Join转化为Map/Reduce的基本原理(其它查 ...
- mysql关联表id_mysql join联表 + id自增
join的写法 如果用left join 左边的表一定是驱动表吗?两个表的join包含多个条件的等值匹配,都要写道on还是只把一个写到on,其余写道where部分? createtablea(f1in ...
- left join 和 left outer join (可解决多个表left join的问题)
http://blog.csdn.net/laolaowhn/archive/2007/09/07/1776219.aspx 通俗的讲: A left join B 的 ...
最新文章
- Ruby系统中的AJAX开发技术简析
- redis常用优化及持久化到硬盘
- es6 使用修饰器实现自动发布事件
- 华硕ROG5电竞手机跑分数据曝光:骁龙888+16G超大运存
- mysql在window的使用记录
- Linux命令解释之find
- (二)OpenCV Mat常用属性和方法
- 数据结构乐智教学百度云_数据结构 百度网盘分享
- 我的私房IT学习网站
- php 扫描条形码,将条形码扫描仪集成到PHP应用程序中?
- elasticsearch(es)的安装-macOs
- 光谱分析软件_利用Tracker软件分析车前草提取液的吸收光谱特征
- 计算机管理磁盘管理,windows7双磁盘管理图文教程
- ws2812 程序设计与应用(1)DMA 控制 PWM 占空比原理及实现(STM32)
- ubuntu命令 图片 壁纸_[教程]Ubuntu下完整配置自动壁纸切换
- “枪枪爆头”!用Python写个了使命召唤外挂
- 无锡室内设计——流行的几种室内装饰风格
- 图观目前各类芯片的交货周期
- Access根据出生日期计算年龄_不好意思,Power Query里根据出生日期计算年龄有点儿繁琐!...
- JavaPoet开源项目的使用
热门文章
- 每日一皮:产品经理的黑化,你听过几个?
- 面试:说说Java中的 volatile 关键词?
- GitHub被“中介”攻击了?啥是中间人攻击?
- javascript清除map所占内存_【原创.54期】 JavaScript的V8引擎初探
- java冒泡排序程序流图_java实现选择排序和冒泡排序及执行流程图解
- C2059 语法错误:“)”
- HNSW算法原理(二)之删除结点
- 10013: An attempt was made to access a socket in a way forbidden by its access permissions
- torch bceloss nan
- pytorch 索引