00:00
大家好,欢迎大家继续收看上硅谷的云计算课程,我是沈超老师。那这节课开始啊,我们来学习一下我们的这个文本处理当中的列题曲,那各位。呃,其实我们前面讲的正则其实就是在处理文本,在处理文件,那我们下面讲的这些东西呢,都是处理文本,那我们今天先学一个简单的,其实后面还会有更复杂的,这个grape,这个aw k和散啊,那我们说啊,首先啊,先有一个是简单一点cut定律,那这是什么?各位前面我们说啊,一个文件。里面是不是有数据。对吧?那graph命令是干嘛的,还记得吗?它是用来提取在这个文件当中,如果我去找有没有root,它是去在文件里去找包含有root的行。没错吧,换句话说,Graph是提取行的。
01:02
哎,啥意思啊,你看啊,我们这里比如说呃,我们在这个password里。哎,我们想要去找包含有root的号对吧,那这个时候我们就干嘛root,然后17C下pass OK,那这里是不是就是它只要这一行里面含有root,它是不是就会把这一整行给提取出来。所以grape的作用是提取行的命令,它是在文件当中,也就是说提取的是字符串的行字符串。那光有行可能不行啊,我们可能还需要其略呀,哎,比如说我前面说了,我要找的是什么,所有的普通普通普通用户对吧,那这样的话,我是不是就应该先取反不包含有root了哈,对不对,然后在里面再去找什么。再去找这个包含有并下被试行对吧,这个是不是就是允许登录的用户对吧,这样的话是不是他才能把普通用户提出来,但是啊各位我现在如果要操作的是普通用户,我操作的是一定得是他的用户名啊。
02:10
而不能说是我操作的是这一行,什么用户密码,什么UIJ这一行对不对,所以光有graph命令还不行,因为PH它只能提取行,我还要能提取到列,那cut就是用来提取列的这样一个命令,那它它咋用啊,那我们先看一下。我。写一个这个文本。学员文本,那么ID有ID有名字仨学员,然后有性别男性的,然后有成绩,OK,那我们这个文本呢,为了节约时间,我提前写好了啊在这里啊这里啊。好,那么我们就已经提前想好,注意啊,你文本写的时候,中间这个分隔符必须是用贴不线,也就是制表符来分,而不能使用空格啊,你小心啊,为什么?因为cutt命令不识别空格,我们后面会讲啊,你先记得这块一定是推不键啊好了,那这里准备好了例子之后,我们想那就可以可以来来提了,怎么提简单cut-F指定提几列提第几列,那我们现在提的是不是就是。
03:22
这个这个学员名字对吧,那是第二点,那怎么办cut。让F第二列在student里边提第二列,哎,这就提取出来了,当然啊,有人说啊,老师,我这里还有一个标题啊。我只想要学员名,我不想要标题,那怎么办?那是不是就要和graph来这个干这个配合了,干嘛先graph-V取反,只要是含有那个么大就是干嘛注意大小写啊,因为我们0NU4是区分大小写了,那就把这个哎哎哎哎哎name me啊啊内部写错了,那只要是含有内部的是不是就把它去掉。
04:03
那这样的话是标题栏是不是就没有了,对吧,然后再在里面干嘛?管道符cut-F提取第二列是不是就提取出来所有的血液系了,没错吧?哎,这是它的基本用法,提取第几列。其次啊,如果想要提取多列,第二列和第三列之间用逗号隔开就行了,那也就是说我不光有这个学员的姓名,呃,这一列我还想要他的成绩,那成绩是第四列。对吧,那我们就叫第二列和第四列,哎,隔开它就直接可以提取正常的页数。看到了好,其次啊,那个我们还可以支持什么,按字符来提,也就是说提取第八个字符,一直到文件尾结尾的这个所有的这个符号,看啊这里写了杠C字符范围从第N个字符开始到行尾。或者从第N个字符到第M个字符结尾,或者是到第一个字符到从开头到第M个字符截截止这个啊,这个其实很难提取到合理的东西啊,就按数字符吧,那这个东西你看啊,T一下STU里边是这样的,那我们读取第八个这个。
05:15
读取从这个第八个开始,往后是吧,往后就是减号在数字的后面,往前就是减号在数字的前面对吧?那么杠C,我们第八个字符往后,那么提取student,那你看读出来的东西是乱七八糟,原因这个的名字短,第八个字符是这个。对吧,那这里都是这个,那这个长名字长,比名的名字长,所以呢,它第八个从这里开始,这两个名字更短,它这个就往后数,所以这两题很乱,根本几乎就不可能起到合理的东西,所以了解一下有这个功能就行。OK,这是指定这个这个指定的字符范围,那其次啊,我们说了。
06:03
我们默认是以推不进,以制表符作为分割了,但是我们前面说不说了,看我们干嘛,呃,我们前面是不是写了RA-V取反,把root给排除掉,我是不是要提取普通用户的用户名。对吧,在ETC下的pass,然后呢,管道符在graph,再在里面找这些包含有并下被时的用户,诶这里是不是都找到了。那现在的问题是我只要用户名。而不要这整行的内容对吧,那这里我们可以看到。帕洛,这里。他用的是什么,它是用分号来作为什么这个分隔符的,所以我们是允许你使用。杠G来指定分割符了,也就说你可以这样写,看杠G指定你。这个分割符务是第几个?OK那啊,如果是这样写,就这个例子啊,它会只提取用户名和他的ID号对吧?那我们先试试这样看,Cut-B以末号来作为分隔符,然后提取第一列和第三列在一切C下的pass坐好,这会把所有用户的用户名和他ID号给提出来,因为什么这个文件第一列是用户名,第二列是密码标志,第三列是不是他的UID对吧?
07:26
那我们现在说我的需求是要提取出普通用户的用户名。那各位,那这个时候就坚决不能先cut。为什么?哎,我说啊这个文件的,如果你看我如果cut提取出来,你怎么知道哪个是普通用户。有人很聪明啊,说UID大于500了,好了麻烦了,你还在写个判断式来判断大于500,那怎么办?所以这个时候这是就先你看啊,我们先看一下这个文件啊,我要提普通用户的这个用户名称,那这个东西呢,首先我们要提的是什么允许登录的用户对吧?我们所有的伪用户的登录事,不论写的是下的no log in还是这个下的Sha纳,这个就只允许这个这个重启关机对吧,它都不是并下的位。
08:14
对吧,所以呢,我要不然我就得先提什么,定下了位,先找关键字,把所有的这个。普通这个子系统用户干嘛给过滤掉对吧,但是过滤掉之后,这里面是不是还有超级用户。哎,我假设我要想写一个脚本,把所有的普通用户都删掉,那如果不把超级用户排除掉,那把root都删掉了,系统是不是就没法用了,没错吧,那所以呢,接下来我是叫gra取反把root给排除掉,对吧?哎,我前面写的这个写法,看着我是先取反把root排除掉,再过滤普通用户,再过滤能登录的用户也一样,这个一样的,它的关键字就在这两个地方了,对吧?所以那这样我是不是就把普通用户给过滤出来。
09:02
没错吧,那现在的问题是,我是不是才能把第一列截出来,这才是普通用户对吧?而如果我们像前面这样,先用cut来解第一列好了,你咋区分哪个是普通用户,哪个是超这个这个系统用户,哪个是超级用户?所以啊,过滤的时候也要注意,先要找到它们的特点,然后是不是先从大的特点上过滤到小的特点,这样逐步来走,听明白了,那这个时候我现在要想再过滤什么。得到它的用户名,那我们就看杠D,我们以冒号为分割杠F提取第一列。好了,就把这个普通用户的名字提出来。提出来要干嘛,对不对?后面写程序的时候提出来把它附在变量里,比如说附在变量变量A里,然后这个变量是不是在程序中就可以操作了,不论是你想改它的密码,还是想把它成这个,设一下它的那个那个什么磁盘配额,我们前面讲过了,还是这个把它给删掉,是不是就可以操作它了,所以先做的事情是先把它提出来。
10:06
OK啊,其实这里用到的都是政策,那我们就可以说,其实我们在事儿中文本过滤一般就是这样的,哪需要写那么复杂的政策,对不对,那记得啊,注意这个事儿。我必须先要用graph把行提出来。然后是不是再用cut把列提出来,是不是才能处理,当然这不是绝对的,有一些提取就要先用cut提列,看它的这个特征在哪,再用graph起行,哎,看你的这个要处理的这个文本,它的特征是什么样子的,OK,好了,那这就是cut的基本用法,提取这个指定的列。再有一个,大家小心一下。Cat命令是不识别用空格来作为分隔符的。制表符可以,哎,我们前面讲的这个。这个例子,这是制表符是不是可以的,冒号或者有特定的符号都是可以的,哎,如果你这个文件当中的内容是有特定符号分割都是可以的。
11:07
那但是空格不行,那举个例子,前面讲过DF查询分区的占用成情况,对吧,那我这里想干嘛,我想查询一下我跟分区的占有率。我可不可以对吧,那读取根分区占用这干嘛。我写一个脚本。每一个礼拜检测一下一下跟分区的占用率,如果这个占比超过了80%或者90%,我就给这个管理员发邮件说你的硬盘快满了,请你处理一下,哎,这样的话我是不是就不至于把硬盘给写满?对不对,那我这个时候是不是想提取一下我的这个占有率,可不可以,那这个时候我们就可以看到来。我们用看来提第几列,12345,第五列看,根本就没有没有作用,原因这是空格,那有人说老师,那你尝试这样来写看杠D,然后用空格来作为这个分隔符,可不可以回撤看,还是不行啊对,加个空格。
12:12
加一个空格来提,你会发现他提出来的是空的原因,你告诉他用空格作为分格符对吧?那么提第五列,那他就数了第一个空格,第二个空格,第三个,第四个,第五个,第五个也是空格。OK,它就一个一个去数空格,所以cut是不能提,反正不论怎么样,就是不论你怎么写,如果是空格作为分格符,这个家伙是没有办法正确提取。那这个大家注意它的局限性啊,Cut命令是没有办法按空格来提取,那如果要想用空格,我们就要用更强大,换意思就是说更复杂的aw k来完成,看着我写的aw k是编程,这是一门独立的语言,它是具备语言的特征了,有变量,有数学运算,有函数,有流程控制,都是能写的,能做,这是一门单独的编程语言那。
13:07
我还是说aw确实还是比较复杂。如果能用cat解决,尽量就还是使用K来做,哎,Cat是最常见的列提取音乐,好了,那这些都是文本还是式文本替换啊,好了各位,那我们cat就说到这儿,这节课就到这儿,我们下节课再见。
我来说两句