Shell文本处理编写单行指令的诀窍

640?wx_fmt=jpeg

小编编程资质一般,刚出道的时候使用的是windows来做程序开发,平时linux命令的知识仅限于在学校里玩ubuntu的时候学到的那丁点。在一次偶然看见项目的主程敲着复杂的shell单行命令来处理日志的时候感到惊讶不已。后来自己自学了一点shell编程,刚看完一本书没过多久就忘记了,因为工作中用到的实在太少,而且命令如此之多,学了一个忘了另一个,始终摸不着门道在哪。

直到某天灵感爆发,发现了一个窍门之后,才牢牢地把握住了shell指令的精髓。

用写SQL查询的思维写shell命令

写SQL小编非常在行,毕业第一年的时候SQL就写的行云流水。经常别人写了一个存储过程来干某件事的时候,哥用一条语句搞定。自然这样的语句也是被不少人吐槽的,难以看懂。

偶然一天我将一个数据表导入成一个CSV文件的时候发现了这个窍门。如果把这个CSV文件看成一个数据表,把各种shell指令看成SQL的查询条件,这两种数据处理方式在思维模式上就没有什么区别了。

然后就开始仔细研究了一番,又有了好多惊人的发现。原来shell指令除了查询之外还可以做修改,相当于SQL的DML操作。shell指令除了能做单表数据处理之外还可以实现类似于SQL多表的JOIN操作。连排序和聚合功能也能轻松搞定。

640?wx_fmt=jpeg

首先下载本章用到的数据,该数据有20多M,建议耐心等待。

git clone https://github.com/pyloque/shellquery_ppt.git

第一个文件groups.txt表示小组,有三个字段,分别是小组ID、小组名称和小组创建时间

第二个文件rank_items.txt代表行为积分。字段分别是行为唯一ID、行为类型、行为关联资源ID、行为时间和行为积分。行为类型包含group单词的是和小组相关的积分行为。其它行为还有与帖子、用户、问题、文章相关的。

文本文件等价于数据表table

数据表是有模式的数据,每个列都有特定的含义。表的模式信息可以在数据库的元表里找到。

CSV文本文件也是有模式的数据,只不过它的列信息只存在于用户的大脑里。文件里只有纯粹的数据和数据分隔符。CSV文本文件的记录之间使用换行符分割,列之间使用制表符或者逗号等符号进行分隔。

数据表的行记录等价于CSV文本文件的一行数据。数据表一行的列数据可以使用名称指代,但是CSV行的列数据只能用位置索引,表达能力上相比要差一截。

在测试阶段,我们使用少量行的数据进行测试,这个时候可以使用head指令只吐出CSV文本文件的前N行数据,它相当于SQL的limit条件。同样也可以使用tail指令吐出文件的倒数前N行数据。使用cat指令吐出所有。

# 看前5行
bash> head -n 5 groups.txt
205;"真要瘦不瘦不罢休";"2012-11-23 13:42:38+08"
28;"健康朝九晚五";"2010-10-20 16:20:43+08"
280;"核谐家园";"2013-04-17 17:11:49.545351+08"
38;"创意科技";"2010-10-20 16:20:44+08"
39;"死理性派&
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值