当前课程知识点:高级大数据系统 > Basics of Linux Data Processing > Manipulating Data on Linux > Video
好
我们下面来介绍一下
就是基于刚刚已经知道的
大家能够去查看数据
已经能够去简单的操控
这个行和列
那么我们下面来看看我们怎么样
进行一些真正的这种数据的挖掘
那我们从这个查找入手
在这个linux里面有一个叫做grep
或者叫做grep的
这样一个命令
那么这个命令可以帮助
大家在这种文本的文件上
进行数据的一个查找
那我们来通过一些简单的例子
给大家看看
这个grep到底能够
做什么样的事情
那么同样的
在我的这个目录底下
我们有3个文件
我们有1.txt
包含了这样的一些内容
然后我们有2.txt
包含这样的一些内容
然后我们还有刚刚有
用cat形成了一个3.txt
有包含这样的一些内容
现在我们来做一次查找
我们假设针对1.txt来做
那么我们来看看这个group到底是怎么用的
它的用法实际上标准的命令是这样的
它会从这个文件
以文件作为它输的一个输入参数
然后以一个子串字符串
作为它匹配的这样一个模式
比如说我们现在想匹配的是
aa这样一个模式
然后我们想要查找的文件是1.txt
那么它的输入方式
就是这样的一个样子
那么这行命令它的一个作用
就是说我们想要把1.txt中
包含aa这个子串的行
全部给打印到屏幕上
那我们来看一下效果
我们输入aa 1.txt之后
我们发现4个A的这一行可以打印出来了
也就是说一的这一行
那我们假设我们把aa变成一个呢
变成一个a的时候
我们就发现它输出变成两行
因为第一行和最后一行
都被匹配到了
所以他们完整的行
都打印到这里
所以用grep这个命令
大家实际上就可以简单的
从我们关心的这样一个数据集中
提取出你想要的行
比如说日志文件中包含特定的
这种关键词的一些日志
或者说大家处理的数据中
包含某一些特别的这个类的
一些这个关键词
好
那我们来看
这个命令它还有一些什么样的
这种更加复杂
或者说更加高级的这个使用方式
第二个使用方式就是说
我们对grep进行使用的时候
我们不但可以对单个文件
我们也可以对多个文件进行
就像我们PPT里面现在提到的这样
那么我们来看一个具体的例子
我们知道在一和三两个txt文件里面
都包含了这个a的字符串
那我们来看看我们
对两个文件进行搜索的时候
会出现什么样的一个效果
grep同样
我们要搜的是aa
那么我们要查找的文件是
1.txt和3.txt
那么我们可以看到
在1.txt里面包含了
这样的行
这样的行它包含了aa这个关键词
那3里面包含了这样的行
它包含了这样的关键词
那么这是我们可以用
grep对多个文件进行搜索
得到一个效果
当然可能有同学会说
其实我并不希望
把这个完整的行打印出来
我可能想知道这个aa这样一个关键词
或者我们搜索的对象到底在哪
出现过就可以了
其实也很简单
我们只需要加上一个参数叫做L
我们就可以只关心这个
输出的文件名
那么我们就发现
我们想要搜的这个模式
实际上在两个文件中都出现过
这是我们在grep里面
假设想要定位文件的时候
我们需要去做的这样一个操作
那么在这边
大家可以看到有这样的一个例子
帮我们去完成这样的事情
那么grep
还能做一些什么样的事情
我们可以统计这个
某一个模式在文件中出现的次数
那我们来看一下
当我们用grep-c这个命令
进行模式的搜索的时候
实际上我们是可以统计
某一个模式在这个文件中
出现的一个次数
比如说同样我们以这个a为例
我们来统计1中出现a的这样一个次数
我们发现它出现在两行
尽管这个第一行它包含了4个a
但是实际上我们的这种统计是
以行作为单元来进行输出的
所以它输出在1点txt中
包含了两个行
那么这两行包含我们输入的这样
一个字符串-c起到了对数量进行统计的目标
那么用-C实际上大家也可以简单的对
大规模的数据进行一个简单的一个出分
比如说我们想知道
在一个比较大的文件里面
我们关心的某一些数据到底出现多少次
进而知道我们后面设计相应的算法
或者说实现相应的这个处理的策略
那么在这个grep里面
还有一个很重要的功能
就是说它能对正则表达式进行一个匹配
当然正则表达式是一个
非常一个大的这样一个讨论的主题
那我们这门课只是告诉大家
在grep里面你可以用正则表达式
当大家用正则表达式
去做事情的时候
大家可能需要去参考一些
正在表达式的这种文档
或者是论文
那么正则表达式可以做到一些什么样的搜索
首先 正则表达式它能对应到自动机
所以我们可以对非常复杂的
有规律的这种文本进行匹配
比如说手机号码
比如说这种人的生日
比如说一些特定的句子
那么就可以通过正则表达式来得到
那我们来看一下一些简单的
正则表达式它的例子是什么样
正则表达式同样它的命令用grep
然后我们在这里面会把这个表达式的式子
写成我们搜索的这样一个模式
那么这一次我们搜索1.txt
我们不再用a这样一个模式
我们不但要求它出现了
我们还要求了一下这个出现的位置
比如说我们要求它出现在行首
那么行首的正则表达式
是用一个向上的这个尖号来表示
那这时候我们对一进行搜索
我们发现
他只给出了aaaa这样的一条记录
这一行
那么实际上我们看到1.txt里面
包含a的位置
不只是这个四个a
还有最后一行
也出现了a
但是由于我们的正则表达式中
约束了它的位置
这时候它只输出了这个第一行
同样我们可以让A出现在句尾
比如说我们要求搜索a
一定在这个行尾
那么我们就会看到它出现的
这个模式就包含了这两个
所以这是我们用正则表达式
进行一些复杂的匹配的时候
我们需要能够做到的一些事情
同样正则表达式
就像我刚刚说的
它可以匹配比较复杂的这种模式
我们利用正则表达式
实际上是可以
做一些比较复杂的搜索
比如说我们可以对头进行匹配
让它打印出某一些日志
包含某些头的这种记录
那么这对日志分析是很有帮助的
这个可以大家在后面的
实际使用当中去体会
用grep结合正则表达式
能够达到的这种搜索的效果
grep里面另外一个重要的参数
是叫做-a
那么我们在我们刚刚的例子中
其实
我们再用grep
进行搜索的时候
它是一个大小写敏感的一个搜索
那我们可以通过一个例子
给大家示意一下
比如说我们在这个1.txt
文件里面去搜索a
那么它给出了两行
分别包含了四个a和一个a
当我们对它进行大写的a
进行搜索的时候
我们发现它并没有输出
所以它是一个大小写敏感的
那么当我们要忽略
这种敏感的时候
我们就可以使用-a这个命令
那这时候它会把匹配到
无论是大写或者小写的字母
都输出出来
这些行都会被打印到屏幕上
那么grep还有另外一个参数
叫做-O
那-O的一个作用
实际上是强制grep
把匹配到的模式给输出来
而不是完整的一行
我们来看它的效果是什么样
比如说我们依然要匹配a这个模式
那么我们对1.txt进行输出
那么我们发现它输出了
五个单独的a
实际上这五个单独的a
是在第一行和最后一行
分别匹配到的这样一个模式
在某一些情况下
实际上我们的确
需要这样的一个目标
尤其是当我们结合
正则表达式的时候
我们比如说从一个文档中
提取股票代码
或者提取手机号码
我们这时候并不需要
他把完整的那一行
那一行可能包含了网页其他的一些信息
那么我们关心的数据
仅仅是匹配到的手机号
或者说是股票号码
那这时候我们
就可以通过-O把我们关心的
这个模式给输出出来了
还有一个命令叫做参数
叫做这个-V
那么看-v的作用是什么呢
我们大家也来看一下
我们发现当我们用grep-v
对1.txt中的
a进行搜索的时候
实际上包含a的两行
都没有输出出来
所以大家可以理解
-v是将我们搜到的结果
进行反向的输出
也就是说把没有匹配上
我们当前搜索的这个模式的行
给输出出来
值得注意的是
其实这些命令是可以叠加
和这个交替着使用的
比如说我们可以把-V
和这个-i给结合使用
这时候我们起到效果
就是说我们让它忽略大小写
同时
让它进行反向的输出
那么和我们刚刚这个
预想的结果是一致的
所以grep实际上提供了一系列
供大家去操控数据的
这样一个方式
大家可以在里面
进行模式的匹配
进行这个正则表达式的这样一个匹配
然后进行这个一些模式的提取
固定的这种pattern的输出
所以是大家能够去在linux上
处理数据的一个
最简单的一个工具
-What is big data and what is big data system?
--Video
-Problems in big data systems?
--Video
-Overview of the course
--Video
-Principles of big data system design
--Video
-Manipulating Data on Linux
--Video
--Video
--Video
-Basics of Linux Data Processing--Manipulating Data
-Running Commands on a Single Machine
--Video
-Running Commands on a Single Machine--作业
-Using a Linux Cluster
--Video
-Using a Linux Cluster--作业
-Storage for Big Data Computing: Distributed file system
--Video
-Storage for Big Data Computing: Distributed file system--作业
-File system and GFS
--Video
-File system and GFS--作业
-Understanding HDFS using Legos
--Video
-Understanding HDFS using Legos--作业
-File System Implementation and DFS
--Video
--Video
-File System Implementation and DFS--作业
-What is MapReduce and why
--Video
-What is MapReduce and why
-Learn MapReduce by playing with cards
--Video
-Processing pattern
--Video
-Processing pattern--作业
-Hadoop
--Video
-Hadoop--作业
-Algorithms in MapReduce
--Video
-Algorithms in MapReduce--作业
-Tutorial
--Video
-Background
--Video
-Background--作业
-Spark
--Video
-Spark--作业
-Use Spark for data mining
--Video
-Use Spark for data mining--作业
-Spark data processing
--Video
-Spark data processing--作业
-Experiment in Spark
--Video
-Experiment in Spark--作业
-Introduction to streaming data processing
--Video
-Introduction to streaming data processing--作业
-Storm
--Video
--Video
--Video
-Storm--作业
-Spark streaming
--Video
--Video
-Spark streaming--作业
-NoSQL introduction
--Video
-NoSQL introduction--作业
-Common Advantages
--Video
-Common Advantages--作业
-Bigtable
--Video
-Bigtable--作业
-Master Startup
--Video
-Master Startup--作业
-HBase
--Video
-HBase--作业
-What is GraphDB and Graph data processing
--Video
-What is GraphDB and Graph data processing--作业
-Graph systems
--Video
-Graph systems
-Example of a GraphDB
--Video
-Example of a GraphDB--作业
-Mahout
--Video
-Mahout--作业
-Case Study: Recommendation
--Video
-Case Study: Recommendatio作业
-Recommendation in Mahout
--Video
-Recommendation in Mahout--作业