码迷,mamicode.com
首页 > 系统相关 > 详细

Linux三剑客awk的应用对比案例详解

时间:2018-10-31 01:18:41      阅读:289      评论:0      收藏:0      [点我收藏+]

标签:\n   表达式   inux   通过   比较   span   单引号   而不是   四种   

 

 

 

awk的格式

awk     参数     ‘条件’(单引号)  文件路径

a.参数我们一般用-F  “[]”  (双引号)   指定分隔符

b.条件  为BEGIN 模块  +  模式{条件}  + END模块

b1.BEGIN模块在执行awk读取文件之前就执行,一般用来定义我们的内置变量,awk必须在输入文件进行任何处理前先执行BEGIN里的动作(action)。

b2.模式{条件}模式就是我们需要查找的范围。模式可以通过正则表达式模式,比较式模式,范围式模式,特殊的模式即BEGIN和END共计四种模式。

条件就是我们在查找的范围里的某一个指定的条件

b3.END模块

在awk读取完所有的文件的时候,再执行END模块,一般用来输出一个结果(累加,数组结果),也可以是和BEGIN模块类似的结尾标识信息

 

awk的格式

 

 

awk     参数     ‘条件’(单引号)  文件路径

 

a.参数我们一般用-F  “[]”  (双引号)   指定分隔符

 

b.条件  为BEGIN 模块  +  模式{条件}  + END模块

 

b1.BEGIN模块在执行awk读取文件之前就执行,一般用来定义我们的内置变量,awk必须在输入文件进行任何处理前先执行BEGIN里的动作(action)。

 

b2.模式{动作}模式就是我们需要查找的范围是以行为单位。模式可以通过正则表达式模式,比较式模式,范围式模式,特殊的模式即BEGIN和END共计四种模式。

 

动作就是我们在查找的范围里的某一个指定的条件以列为单位

 

b3.END模块

 

在awk读取完所有的文件的时候,再执行END模块,一般用来输出一个结果(累加,数组结果),也可以是和BEGIN模块类似的结尾标识信息

 

Awk的正确书写格式为

 

 

 

例:awk -F “[]”‘BEGIN{    }   模式{     }   END{   }’ 文件路径

 

 

 

下面我们结合案例详细说明awk的使用

 

首先我们创建一个文件

 

测试文件

 

  1. Zhang Dandan    41117397    :250:100:175
  2. Zhang Xiaoyu    390320151   :155:90:201
  3. Meng  Feixue    80042789    :250:60:50
  4. Wu    Waiwai    70271111    :250:80:75
  5. Liu   Bingbing  41117483    :250:100:175
  6. Wang  Xiaoai    3515064655  :50:95:135
  7. Zi    Gege      1986787350  :250:168:200
  8. Li    Youjiu    918391635   :175:75:300
  9. Lao   Nanhai    918391635   :250:100:175

 

说明:

 

  • 第一列是姓氏
  • 第二列是名字
  • 第一列第二列合起来就是姓名
  • 第三列是对应的ID号码
  • 最后三列是三次捐款数量

 

  1. 我们创建完文件以后我们干什么?
  2. 我们要先知道awk是按列取数据最方便的

 

练习题1:显示姓Zhang的人的第二次捐款金额及她的名字

 

首先我们要先找到姓张的人awk –F “[ :]”指定分割符为空格和冒号:把内容分割成一列一列的

 

‘/Zhang/{print $1,$5}‘ 在正则里我们学过//里的内容为需要过滤的内容{}里的print为输出的意思$2和$5就是第一列和第五列

 

 

 技术分享图片

 

 

练习题2:显示Xiaoyu的名字和ID号码

技术分享图片

 

 

 

练习题3:显示所有以41开头的ID号码的人的全名和ID号码

技术分享图片

 

 

$3~是指定第三列拥有正则的能力

 

 

练习题4:显示所有以一个D或X开头的人名全名

技术分享图片

 

练习题5:显示所有ID号码最后一位数字是1或5的人的全名

技术分享图片

 

 

.练习题6:显示Xiaoyu的捐款,每个值都有以$开头。如$ 520$135

 技术分享图片

 

.

 

练习题7:显示所有人的全名,以姓,名的格式显示,如Meng,Feixue

技术分享图片

 

 

 

 

多模式多动作

 技术分享图片

 

 

 

这里我们说一下xargs  -l1

 

Xargs会把管道传递过来的stdin里的换行符,空白换成空格取代,形成一行作为整体输出:

 

如果不指定分批选项(-i,-L,-n),Xargs的一整行结果将作为一个整体输出,而不是分隔开的!

 

分割选项:-d ,-0 | 分批选项: -n,-L,-i/-I | 使用-p或-t来观察命令的执行过程

 

 

 

BEGIN模块

在我们执行awk读取文件之前就执行一般用来定义我们的内置变量

因为awk默认的读入换行符和输出换行符都市\n

我们可以通过BEGIN来给他变换一下值

例;

技术分享图片

 

 

 我们也可以让BEGIN指定输出符号

技术分享图片

我们还可以指定变量

技术分享图片

还可以进行计算

技术分享图片

也可以在文件输出的时候作为输出表头使用我们应该知道awk在执行的时候先执行BEGIN模块

技术分享图片

 

 通过以上案例我们可以得出在没有文件的条件awk依旧可以处理BEGIN模式下的动作(命令)

END模块:

END在awk读取玩所有的文件的时候,在执行END模块,一般用来输出一个结果(累加。数组的结果)也可以和BEGIN一样 的意思在结尾给文件进行结尾语

例:

技术分享图片

 

 我们也可以用END进行运算输出结果

技术分享图片

 技术分享图片

awk数组

数组就是具有相同点或者说共同点比如ab.ac.ad.af.ag他们的共同点就是都有a

假如我们想用一种变量表示多组数据通常我们有优先考虑数组的形式

技术分享图片

 

 通过数组查看访问量

技术分享图片

 

Linux三剑客awk的应用对比案例详解

标签:\n   表达式   inux   通过   比较   span   单引号   而不是   四种   

原文地址:https://www.cnblogs.com/wanigna/p/9871052.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!