0x15 数据工程师,常用Shell命令哲学

六一那天,打开朋友圈就寓目一群朋友在呼喊着过六一节,我仔细研讨了大半天,六一节,不是孩童节吗?一个个年近二十的人过串着小孩子的节日,究竟得是何等的动机?就恍如是一群小屁孩在拿左手挠着屁股,右手塞进嘴里,抬着头,打着水灵灵的眼睛看自己,然后,突然间张口一句,大叔!

摘要:Linux以其强大的通令行称霸江湖,Shell命令是多少极客的必修兵器。探索性数据解析,在须要和数量都不太明确的环境下,使用各样吩咐进行一遍探索与发掘。从基础的文件查看到概括的总计,再到有些常用的探索性分析命令,其目标都只是为着更好的做多少解析与发掘而已。

老伯你妹啊!我才二十!

0x15.jpg

但是,烦归烦,如果大声说出来估算会被小屁孩打,一转念依然得笑的乌贼灿烂地方头答应他们。

01 Shell命令行

对此时常和数码打交道的人的话,数据工程师应该也是常事和Linux打交道。Linux以其强大的通令行称霸江湖,因而,Shell命令也是数量极客的必修兵器。

行使Linux命令行的多少个指令,就可以形成部分简便的计算分析工作,比如
应用wc命令统计文件行,单词数,字符数,利用sort排序和去重,再组成uniq可以拓展词频总结。比如:

$ cat file.txtyunjieyunjie-talkyunjie-yunyunjieyunjie-shuo$ sort file.txt | uniq -c | sort -nr | head -5 2 yunjie 1 yunjie-shuo 1 yunjie-talk 1 yunjie-yun

先用cat命令,通晓一下文本的光景格式与内容,发现每行为一个单词。现在须要总结那几个单词出现的频率,以及显示出现次数最多的5个单词。

先对文件举办排序,那样同样的单词在紧挨着的行,再后uniq -c
命令,计算分化的单词及顺序单词出现的次数。那样获得的结果就是次数前边跟着单词,然后采取sort
-nr对次数举办排序,并逆序显示,最终head命令显示结果的前5行。

极度不难的一种办法,读取文件,排序,统计,再对计算结果开展逆序,最终只突显前多少个结实。

类似于sql语句:

select word,count(1) cntfrom filegroup by wordorder by cnt desclimit 5;

一旦对sql语句熟练的话,上边的款式应该更易于精晓。纵然落成的盘算和措施至极简单,但在实质上的探索性数据解析中利用却更加频仍。

真是得面对着一群嫩孩子,然后自己也要嫩得跟脸上的年轻痘一样,使劲一挤就会崩破。

02 探索性分析

比如说在日记分析中,有时并从未这一个了然的靶子,或者尽管有鲜明的对象,日常各个数码也并不曾明了的概念。比如,外人丢给你一个压缩文件,说想分析一下里面有何是这些的造访请求。职责描述就是这么,没有更简明的了。

拿到日志文件和这么的辨析职责,就须要展开种种可能的开拓性分析。先看一下文件的格式,是不是压缩过,使用gzip压缩照旧tar压缩。解压后,要求先差不离精晓一下,文件是什么样的格式。对于网络请求的日志文件,是单排一个呼吁和响应,依旧多行一个伸手和响应。查看文件有稍许行,查看文件占用空间大小。假使解压后含有多少个目录或者文件,同样的一个指令,更能发挥强有力功用。此时,平时须求如下命令:

gzip/tar:压缩/解压
cat/zcat:文件查看
less/more:文件查看,帮衬gz压缩格式直接查看
head/tail:查看文件前/后10行
wc:总计行数、单词数、字符数
du -h -c -s:查看空间占据

地点有一个比较好玩的命令组,less和more,那八个都可以分页查看文件。最先河有些more命令,好像是立时more不协理向后翻页。于是一帮人就在此基础上拓展了创新,直接叫less,和more同样的法力只是更强大些。由此,也进步出了“less
is
more"的艺术学,“少即是多”,而且少比多更好。那种思维,在产品设计与代码优化中都有反映。

打听文件的大致信息后,可能必要领取一行中某个字段的情节,或者须求寻找某些行出来,或者必要对某些字符或者行举办自然的修改操作,或者须要在诸多的目录和文书中找出某此天的日志(甚至找到后需求对这么些天的日记举行合并处理),此时上边那一个命令可以帮您:

awk:命令行下的数据库操作工具
join/cut/paste:关联文件/切分字段/合并文件
fgrep/grep/egrep:全局正则表达式查找
find:查找文件,并且对寻找结果批量化执行职责
sed:流编辑器,批量改动、替换文件
split:对大文件举办切分处理,按多少行一个文本,或者稍微字节一个文件
rename:批量重命名(Ubuntu上带的perl脚本,其余系统要求安装),使用-n命令进行测试

如:

# 解压缩日志$ gzip -d a.gz$ tar zcvf/jcvf one.tar.bz2 one# 直接查看压缩日志$ less a.gz # 无需先解压

其它,以z开首的多少个指令可以大约处理gzip压缩文件,
如zcat:直接打印压缩文件,还有zgrep/zfgrep/zegrep,在压缩文件中一向搜索。

# 查询字符串,并显示匹配行的前3行和后3行内容fgrep 'yunjie-talk' -A 3 -B 3 log.txt# 在当前目前(及子目录)下,所有的log文件中搜索字符串hacked by:$ find . -name "*.log" | xargs fgrep "hacked by"

fgrep, grep, egrep的一对界别:

fgrep按字符串的当然意思完全合营,里面的正则元字符当成普通字符解析, 如:
fgrep "1.2.3.4" 则只匹配ip地址: 1.2.3.4,
其中的.不会匹配任意字符。fgrep当然会比grep快多了。写起来又简约,不用转义。
grep只行使普通的局地正则,egrep或者grep -E使用扩充的正则,如

egrep "one|two", 匹配one或者twogrep -E -v "\.jpg|\.png|\.gif|\.css|.js" log.txt |wc -l

追寻所有来自东瀛的ip的哀求,先把富有来源ip取出来,去重,找出日本的ip,放入文件japan.ip,再使用命令:

$ cat log.gz | gzip -d | fgrep -f japan.ip > japan.log

对hive中导出的文书,替换\001

cat 0000* | sed 's/\x1/ /g' > log.txt

就跟年轻向来不值钱一样,童年偏偏就那么的短短几年,还在最操蛋的年龄,当然,操蛋永远操不完。整一笼子蛋一样,孵了鸡,之后,就别指望蛋吃完了。过去了就是病故了,可以偶尔拿出去评鉴评鉴,可是久了,就跟吃多了药一样,显得不实在,人就变得虚妄。

03 其余常用命令

一经文件编码是从windows上传过来的gb2312编码,须要处理成utf8的编码,或者某个日志被黑客后来修改过了,须要和原先的备份数据开展自查自纠,那么些工作都是急需多少工程师自己能熟谙的主宰。

比方日志文件是近来一年的伏乞日志,那么可能是按天或者按小时开展独立存放,此时一经只必要领取某些天(比如周末)的数额,很可能须要处理时间。

故而,上面的一些发令或者工具就很有用了:

date:命令行时间操作函数
sort/uniq:排序、去重、统计
comm:对七个排序文件举行按行比较(共同行、只现出在左边文件、只现出在右手文件)
diff:逐字符相比文件的异议,合作cdiff,类似于github的显得效果
curl/w3m/httpie:命令行下进行网络请求
iconv:文件编码转换,如:iconv -f GB2312 -t UTF8 1.csv > 2.csv
seq:暴发一连的连串,同盟for循环使用

输出明日/后天的日子字符串

$ date -d today +%Y%m%d20160320$ date -d yesterday +%Y%m%d20160319

对unix秒的拍卖

# 当前的时间$ date +%s1458484275$date -d @1458484275Sun Mar 20 22:31:15 CST 2016

多个公文a.txt, b.txt求只现身在a.txt中的数据:

# 排序两个文件$ sort a.txt > a.txt.sort$ sort b.txt > b.txt.sort# 求只出现在c.sh中的内容$ comm -2 -3 a.txt.sort b.txt.sort

虚妄那词还真是悬妙,多一句是弄虚作假,少一句丫的就成了天真!

04 批量操作

对地点的文件举行了一番探索分析后,可能曾经有肯定的端倪要么眉目了,须求更进一步的拍卖大批量的公文或者字段了。此时的手续也许是一个消耗时间的进程,也许是一个内需看缘分的进度。由此可见,可能须求综合上边的一对指令,并且对大气的日记举行处理。

哲学,那也是彰显Shell更有力的另一方面------批量化的意义了。命令比图形界面的最大优势就是,只需熟练了,就很不难已毕批量化操作,将那么些批量化的一声令下组合成一个文件,于是便发生了剧本。

批量化命令或者脚本,熟谙多少个常用的流水线控制,就能发挥出强大的特性:

if条件判断:

if [ -d ${base_d} ]; then mkdir -p ${base_d};fi

while循环:

whiledo do_something;done < file.list

for循环(用得很多):

for x in *.log.gz;do gzip -d ${x};done

那多少个原则判断与循环,也可以平素在指令行下使用,不一样是多加多少个支行隔开即可。

其它,执行长时间的职分,最好直接用nohup来操作。

转变过去8天的日子连串:

$for num in `seq 8 -1 1`;do dd=`date --date="${num} day ago" +%Y%m%d`;echo ${dd};done2016031220160313201603142016031520160316201603172016031820160319

有目录和文书如下:

20160320 目录 10.1.0.1_20160320*.log.gz 目录 201603200000.log.gz 文件 201603200010.log.gz 文件 10.1.0.2_20160320*.log.gz 目录 201603200000.log.gz 文件 201603200010.log.gz 文件

必要:去掉目录中的*.log.gz,那样很不难令人误解为文件。 rename
-n为测试,rename使用和sed相同的语法。

$ for d in 201603??;do echo ${d}; cd ${d}; rename -n 's/\*\.log\.gz//' *.log.gz ; cd ..;done

测试完了后,使用rename不加-n为确实实施重命名操作。

不过,天真这东西还真是不好说,就拿看了十多年的蓝胖子来说,十余年过去了,他依然一身黄色间或点一片的反革命。

05 结尾

这儿只是简单列举了一部分数据解析或者数额处理有关的通令,只好算是Linux的Shell那博大精深的通令中的冰山一角。

但万一能把那几个相关的下令融会贯通,并且能实际行使以来,也好不简单在数量极客之路上多走了一步。

从基础的文书查看到概括的统计,再到有的常用的批判性分析命令,其目标都只是为了更好的做多少解析与发掘而已。能综合这个命令,并结合起来使用,将下令存放到文件,即暴发了Shell脚本。Shell脚本本身也是一门强大的文化了,其中各种命令还有各样命令协助的参数,值得逐渐研商。

青色白色最好。

万一粉色是天上,那白色的就是梦,来自于小时候的纯稚。即使反动是天空,粉红色就是然而的差不多。无论是怎么样,白色和黄色,在切切实实的面前梦着就是一尘不到。

因为天真,所以更要梦着,因为直接在梦着,所以进一步天真。大概哆啦A梦一贯不曾想到,他到来了大雄的身边,就会甘愿一贯陪着大雄身边,因为他径直陪在大雄身边,所以她会舍不得离开。

他是机器猫,可是最孩子的心理。

俺们的情义很多都积攒在岁月的史诗当中,当然谁都不会去挑选永远的生存在史诗里面。生活,意味着向前,不后退一步,一步都是以后面踩去的。

本人想起了「伴我同行」中,最终大雄喝下了蓝胖子的谎言八百,然后他用那个世界最真正的虚假留住了哆啦A梦,也留下了他的童年。

台上台下一群人的幼时,赚够了笑脸哭脸,剩下的就是全方位电影院空旷旷的悲伤,偶尔00后的孩子,笑的让人震撼。

拨动落了泪,却不让任何人见到。

蓝胖子的任意门可以不断去其余地点,不过一味未曾主意打破时间的无尽,尽管回来过去,时间还在走,你说到底会走到那点,你现在所处在的年月。

大雄回到小时候收看了外祖母,她告诉外祖母,我是大雄,曾外祖母点点头,你是大雄!外婆说想看大雄的新人,大雄跑回现在拉着静香要跟她结婚。到那边,这么些故事就得了了。

其实何人都明白,时间机器也不能留下姑婆。

因为日子会走,而且在您意识了时间会走之后,时间越走越快。

哆啦A梦无法用时间机器回到离开大雄往日,也不能将这些世界所有的全部都再来两遍,他可以成功!

他不想走,可是她必须走,他以为。

这么多年来说,我先是次觉得蓝胖子有一股强劲的管理学感,强大的推翻了自我的求实,然后不注意地流窜到了千古,而她根本地像一个伫立将来看今朝的智囊。

一个猫型机器人,长得像只狸猫,就算自己也尚无见过。

莫不某一天,我也会喝下那瓶装满了不知晓怎么颜色的透明液体,然后,说着一堆我自己都了然的谬论。什么青春流逝,什么童年早就变成了过去,什么再也不会再看看这几个人。

只是,我终归是了解的,说出的那么些话就是在确认,这一体都已经暴发。

蓝胖子的农学在于此,一堆杂乱不堪的东西堆砌起了所有童年,而你站在那儿看童年不一定觉得幼稚。也不会像某些脑残说什么样哆啦A梦的结果是大雄就一个智障病者,你特么才智障,滚你特么的法定原定结局。

幼时不需求落幕,也不需求臣服于现实的此时此刻,原本就不是三个世界的事物,又说什么样关系!

相关文章

Comment ()
评论是一种美德,说点什么吧,否则我会恨你的。。。