Linux20180427

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux20180427相关的知识,希望对你有一定的参考价值。

9.6/9.7 awk






awk awk相对于sed 更方便的功能是支持了分段。

技术分享图片

awk不会更改文件的内容


最简单的一种用法,以某种分隔符来分割后,取第几部分打印出来。

awk -F ':' '{print $1}' passwd

-F 分隔符  {$1 第一部分}

{$1,$2,$3} 第一二三部分

{$0表示所有段} awk '{print $0}' passwd

技术分享图片


如果希望分段出来的结果之间有一个分隔显示,可以这样

awk -F ":" '{print $1" "$2" "$3}' passwd 这个就是以:为分隔符,找出第一二三位,中间用空格隔开,当然空格也可以为其他符号

技术分享图片

技术分享图片


awk的匹配功能,类似sed的功能

匹配出有oo的段

awk '/oo/' passwd

技术分享图片

在这个基础上,如果想查看第几个段的,可以加上$位置~ 来匹配。比如像查看第一个段落中是否有oo的

awk -F ':' '$1~ /oo/' passwd 这个场景使用在比如想在passwd查找某一个用户是否存在 因为第一个冒号前面是用户名

技术分享图片


awk可以支持多个表达式一起写,比如我们想查找含有root的第一位和第三位以及第一位可能有lo的所在行。

表达式要写在一对单引号内,print的内容要用{}


使用场景: 

awk -F ':' '/root/ {print $1,$3} $1~/lo+/ {print $0}' passwd  

技术分享图片

operator 11 是啥玩意?其实这个就是passwd里的内容

技术分享图片

使用awk 和grep同时来展示如何选出包含root 和 user的行

技术分享图片


接下来的用法可以理解为一个简易的数学运算表达

可以理解为这样:以某种分隔符分割开后的每一部分进行比较, == >= != 

eg awk -F ':' '$1== "root"' passwd  分割后的第一部分是否为root

技术分享图片


eg awk -F ':' '$3 >=1000' passwd 打印出第三部分大于等于1000的

技术分享图片

注意这个被比较的是1000这个数字。如果把1000用双引号引起来的话,就代表是字符串,也就是按照1000的ANSCII码值。默认如果是字符串比较的话,必须使用双引号

如果不写print的范围,默认的是全部 $0

技术分享图片

技术分享图片     


技术分享图片

从上面的例子可以看出,其实awk可以理解为简单的小程序,包括了算数运算,逻辑运算的等。,可以随心所欲的加各种判断条件只要是符合awk的格式      

awk -F ':' '$3<$4 {print $3,$4}' passwd 比较第三个第四位并打印出第三和第四位

技术分享图片


技术分享图片

如果想部分匹配该怎么做? 使用匹配符 ~ 。

可以使用或 || 与 &&来进行条件的选择或者同时满足。

eg 我想匹配第三位小于第四位同时第一位的首字符是在a-h的范围内

awk -F ':' '$3<$4 && $1 ~"^[a-h]"' passwd  匹配符~ 记得用双引号引起来条件

技术分享图片


OFS内置变量是用来指定print时候用的分隔符。几个注意的地方:

  1. OFS要在大括号里进行定义

2. OFS要写在条件的前面


技术分享图片

eg  awk -F ':' '{OFS="*****"} $3>1000 || $7~ /bash/ {print $1,$3,$7}' passwd


技术分享图片


NR NF这两个内置变量

NR代表有多少行  NF代表有多少列

技术分享图片


技术分享图片


甚至可以加判断条件 if 

技术分享图片


技术分享图片 


也可以将行号加在前面

awk -F ':' '{print NF ":" $0}' passwd

技术分享图片


打印前十行,同时打印行号

awk -F ':' 'NR <=10 {print NR "-"$0}' passwd

技术分享图片


awk -F ':' '{print $NR":" $NF }' passwd

这个相当于 $1:$7 $2:$7 ------$行数:$7


技术分享图片


接下来的这个,注意== 和 =的区别,同时可以看看 OFS的用法

技术分享图片



tot是total的变量 求和.注意语法。

awk -F ':' '{tot=tot+$4}; END {print tot}' passwd 所有第四段的和,简单的求和运算。

技术分享图片


还有就是加上判断,if后进行显示。

技术分享图片



总结一下

awk我认为是三种里最简单的,因为它具备了一定编程语言的特点,所以写起来比较顺手。

注意一些变量,语法以及双引号和单引号的用法。

以上是关于Linux20180427的主要内容,如果未能解决你的问题,请参考以下文章

20180427

适配器(Adaptor)模式

SQL Server: create table sql script

机器学习分类实例——SVM(修改)/Decision Tree/Naive Bayes

linux基础知识都有哪些

Linux汇总一——Linux程序管理,Linux终端,Linux命令格式命令类型及Linux命令帮助