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

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

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

通过数组查看访问量

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

时间: 2024-10-12 21:22:46

Linux三剑客awk的应用对比案例详解的相关文章

Linux三剑客——awk

Linux三剑客--awk DKing~共享 1.1 awk执行过程 awk读入第一行内容 判断是否符合模式中的条件NR>=2(是否让你进入大门) 如果匹配则执行对应的动作{print $0} 如果不匹配条件,继续读取下一行 继续读取下一行 重复以上过程,直到读取到最后一行(EOF:end of field) 1.2 记录和字段 record    表示记录.行           记录相当于行 field       表示区域.字段       字段相当于列 1.2.1 记录(行) awk默认

Linux系统根文件以及命名规则详解

一.Linux系统根文件详解 Linux的重要哲学思想其实就是:将程序的配置文件保存为纯文本格式. 1./boot:系统启动文件,如:内核文件,iniyrd以及gurb(bootloarder) 2./dev:目录下为设备文件,设备文件又分为块设备和字符设备: 块设备:按数据块随机访问,没有顺序. 字符设备:线性访问,按字符为单位进行. 注:其中背景为黑色,字体为***的文件,为特殊文件,"1,   0"分别为文件的主设备号和次设备号 [[email protected] ~]# ls

Linux 定时重启tomcat及配置定时任务详解

Linux 定时重启tomcat及配置定时任务详解 1.首先编写重启tomcat脚本 #!/bin/sh TOMCAT_PATH=tomcat地址路径/bin echo "TOMCAT_PATH is $TOMCAT_PATH" PID=`ps aux | grep tomcat地址路径 | grep java | awk '{print $2}'` if [ -n "$PID" ]; then echo "Will shutdown tomcat: $P

Linux内核模块编程与内核模块LICENSE -《详解(第3版)》预读

Linux内核模块简介 Linux内核的整体结构已经非常庞大,而其包含的组件也非常多.我们怎样把需要的部分都包含在内核中呢?一种方法是把所有需要的功能都编译到Linux内核.这会导致两个问题,一是生成的内核会很大,二是如果我们要在现有的内核中新增或删除功能,将不得不重新编译内核. 有没有一种机制使得编译出的内核本身并不需要包含所有功能,而在这些功能需要被使用的时候,其对应的代码被动态地加载到内核中呢?Linux提供了这样的一种机制,这种机制被称为模块(Module).模块具有这样的特点. 模块本

Linux中history历史命令使用方法详解

在/etc/profile里添加如下: #History export HISTTIMEFORMAT="[%F %T]" HISTDIR=/home/common/.hist if [ ! -d $HISTDIR ]; then         mkdir -p $HISTDIR         chmod 777 $HISTDIR fi export HISTSIZE=100000 export HISTFILE="$HISTDIR/${LOGNAME}.hist"

Linux下同步工具inotify+rsync使用详解

Linux下同步工具inotify+rsync使用详解 Posted on 2014-12-12 |  In Linux|  9|  Visitors 438 1. rsync 1.1 什么是rsync rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.它使用所谓的"Rsync演算法"来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快.所以通常可以作为备份工具来使用. 运行Rsync serve

linux 之用户和组及权限详解

linux之用户和组及权限详解 权限有三种 r:可读,w:可写,x:可执行 针对文件: r:可读, 表示可使用cat等命令查看 w:可写,  表示可写或删除指定文件 x:可执行,表示在bash下可当作命令使用执行 针对目录: r:可读,可使用ls命令显示内部的所有文件 w:可写, 可以在此目录中创建文件或子目录 x:可执行,可使用cd命令切换此目录,也可使用ls -l查看内部文件 权限的表现形式: 0 000 ---:无权限 1 001 --x: 执行 2 010 -w-: 可写 3 011 -

Linux(centos)系统各个目录的作用详解

Linux(centos)系统各个目录的作用详解 文件系统的类型 LINUX有四种基本文件系统类型:普通文件.目录文件.连接文件和特殊文件,可用file命令来识别. 普通文件:如文本文件.C语言元代码.SHELL脚本.二进制的可执行文件等,可用cat.less.more.vi.emacs来察看内容,用mv来改名. 目录文件:包括文件名.子目录名及其指针.它是LINUX储存文件名的唯一地方,可用ls列出目录文件. 连接文件:是指向同一索引节点的那些目录条目.用ls来查看是,连接文件的标志用l开头,

【甘道夫】通过Mahout构建贝叶斯文本分类器案例详解

http://acm.hdu.edu.cn/showproblem.php?pid=1507 大致题意:在一个n*m的格子上,黑色的地方不可用,问在白色格子上最多可放多少1*2的矩阵. 思路:建图,每个白色格子与它临近的上下左右的白色格子建边,求最大匹配,答案为最大匹配/2,因为是双向图.最后输出匹配边时,当找到一组匹配边记得将该边标记,以防重复计算. #include <stdio.h> #include <algorithm> #include <set> #inc