awk提供了极其强大的功能:可以进行正则表达式的匹配、样式装入、流控制、数字运算符、进程控制语句甚至于内置的变量和函数。

简单地说,awk就是一种用于处理文本的编辑语言工具,它扫描文件中的每一行,查找与命令行中所给定内容相匹配的模式,如果发现匹配内容,则进行下一个编程步骤。如果找不到匹配内容,则继续处理下一行。

@ubuntu:~$awk  ' 条件1 {动作1} 条件2 {动作2} ...' file

示例如下:

@ubuntu:~$awk  ' i==1 {print $0 } i==2 {print $1} ' file

以上命令的执行逻辑是:awk从file中读取数据,每次读取一行,读到一行数据之后判断每一个条件是否成立,如果成立则执行花括号里面的动作,如i==1成立则执行print $0,再判断i==5是否成立来决定是否执行print$1。然后读取下一行,以此类推。如果一个动作前面没有条件,则这个动作就可以“无条件”执行。

为了更好理解,建一个简单的文档file来执行一遍:

(1)打印指定列

@ubuntu:~$awk ' { print $1, $2} '   file

注意,其中单引号中大括号内就是awk语句,只能被单引号包含。$1表示第一列,$2表示第二列,$n表示第n列。而$0表示整一行(即一行中的所有列)

(2)格式化输出(和C语言差不多)

@ubuntu:~$awk ' { printf " %-10s:%-d\n", $1, $2 } ' file

(3)过滤(条件选择)

@ubuntu:~$awk ' { $3==8 && $4 ==9 } { print $0 } 'file

其含义是读取file中的一行信息,判断第3列是否等于8而且第4列是否等于9,如果是,则打印该一行,然后再读取下一行。

(4)打印表头,引入内建变量a

@ubuntu:~$awk  ' { a==1 || $3==8  } {print } 'file

注意:

1、a是一个所谓的内建变量,表示已经读出的记录数(即行号);

2、print后面什么都没有,默认表示print $0。

(5)指定分隔符

@ubuntu:~$awk ' BEGIN {  FS=":" } {print $1}' /etc/passwd

注意:BEGIN意味着紧跟在它后面的动作{FS=":"}会在awk读取第一行之前处理。

上面的语句等价于

@ubuntu:~$awk -F:'{ print $1 }' /etc/passwd

如果有多个分隔符,则可以写成

@ubuntu:~$awk -F ' [\t; : ]' ' {print $1}' /etc/paswd

其中,-F '[\t;:]'的意思是指定制表符、分号以及冒号为分隔符

(6)使用正则表达式匹配字符串

@ubuntu:~$awk ' $0~/bria/  {print} ' file

其含义是将所有匹配bria的行打印出来。其中,$0~/bria/是一个条件,表示所指定的域(这里是$0)要匹配的规则(这里是bria),简单说,file中有一行只要含有单词ria,就会被选出来然后打印,同时要注意,这里的单词bria被写在两个“/”之间,事实上这两个“/”之间写的就是“正则表达式”。正则表达式就是一些约定的规则,用这些规则来匹配字符串,从而达到过滤文本信息的目的,也就是使用各种字符和符号,来选出我们想要的信息。

(7)使用模式取反的例子

@ubuntu:~$awk ' $0~/bria.*/  {print} ' file

含义:将所有不匹配bria的行打印出来。

(8)将A项(A列)的信息分别存放在各个文件中

@ubuntu:~$awk ' {print > $1 } ' file

其含义就是每一行都将被重定向到比第一个域(A)命名的文件中去。也可以将指定的域重定位到相应的文件,例如:

@ubuntu:~$awk ' {print $2, $6 > $1 } ' file

其含义是将每一行中的B,C重定位到与其A相应的文件中去!(9)统计各个级别的数量

@ubuntu:~$awk ' NR!= {a[$4]++} '> END{for(i in a) print i "," a[i];}' file

其含义是$4是级别名称,如1,a是一个以这些级别为下标的数组,其值从零开始计算。(10)将某列的数累加并打印出来

@ubuntu:~$awk '{ sum+=$1} END{print sum}' file

其含义是END表示紧跟其后面的语句只会在awk处理完所有行之后才被执行。

awk 匹配_linux的awk命令详解,通俗易懂相关推荐

  1. mysql的top命令参数_linux下top命令详解包括top命令参数使用及结果(virt,res,shr)排序举例说明...

    top 命令是 Linux 下常用的系统资源占用查看及性能分析工具,能够实时显示系统中各个进程的资源(比如cpu.内存的使用)占用状况,类似于 Windows 的任务管理器.top命令的执行结果是一个 ...

  2. _linux中curl命令详解-linux运维

    linux中curl命令的使用详情:1.[curl url]获取该网址的文本信息:2.[curl -i url]获取该网址的文本信息以及协议头部信息:3.[curl -x proxy url]使用代理 ...

  3. linux执行lsof命令_linux系统 lsof命令详解

    简介 lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.所以如传输控 ...

  4. minicom指令_Linux系统minicom命令详解

    minicom 功能说明:调制解调器通信程序 语 法:minicom [-8lmMostz][-a][-c][-C][-d][-p][-S 补充说明:minicom是一个相当受欢迎的PPP拨号连线程序 ...

  5. linux命令查找java文件_Linux文件查找命令详解

    对于文件查找,我们最好用的还是属于find命令了,在说find命令之前,先把另外几个查找命令介绍一下. 目录 0x01 查询命令介绍 0x02 find命令介绍 0x01 查询命令介绍 在介绍之前,首 ...

  6. linux mysql source命令_Linux下source命令详解

    source命令用法 source FileName source命令作用 在当前bash环境下读取并执行FileName中的命令. *注:该命令通常用命令"."来替代. 使用范例 ...

  7. linux操作系统之终端命令echo命令详解 通俗易懂

    一. 使用格式:echo 文字内容 echo命令可以将传递给终端的参数再在终端显示一遍. 那么为什么要将传递的给终端的参数再在终端显示一遍呢? 其实该命令单独使用的几率是很小的,该命令通常是配合重定向 ...

  8. linux awk命令详解,使用system来内嵌系统命令,批量github,批量批下载视频, awk合并两列...

    linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...

  9. cut\grep\awk\sed命令详解

    cut\grep\awk\sed命令详解 1.cut命令详解及实例 (1)作用:提取文件中指定的列 语法格式:cut  选项  文件名   (2)选项作用:      -d 分隔符     按照指定的 ...

最新文章

  1. 开源 免费 java CMS - FreeCMS1.5-建站向导
  2. 国产SM4密码算法详解和实现
  3. SAP RETAIL 事务代码MP38可以为多个物料执行预测
  4. python之路6-迭代器、生成器、装饰器
  5. android 插件化 模块化开发(apkplug)
  6. python吃内存还是cpu_Python2 得到 CPU 和内存信息要怎么实现呢?
  7. java 获取服务器硬件_dell服务器远程获取硬件状态
  8. Java中看今天是星期几,礼拜几
  9. CSS具有最高优先级 !important
  10. 关于插件管理器Alcatraz的一些问题
  11. 构造器2(Java)
  12. c语言二进制微粒群算法,离散二进制微粒群算法.pdf
  13. 《东周列国志》第二十二回 公子友两定鲁君 齐皇子独对委蛇
  14. 正则表达式的语法及使用
  15. FSSR : Frequency Separation for Real-World Super-Resolution
  16. 学以致用-掷双骰儿(craps)游戏的直方图(概率分布)数据分析
  17. iphonex适配游戏_Unity+iPhoneX适配方案
  18. PREEMPT_RT 高精度定时器
  19. Mac电脑如何实现Word一键转PPT
  20. 关于GetDC()和ReleaseDC()的问题

热门文章

  1. spring boot 初步学习
  2. 【BZOJ】1725: [Usaco2006 Nov]Corn Fields牧场的安排
  3. 给公司部门设计的SOA架构
  4. Android 百度推送使用总结
  5. .NET Mass Downloader -整体下载.NET源码
  6. C++学习之路:适合C++新手的练手项目,高薪之路必备项目!
  7. 部门年终总结大屏太难做?FVS开发模式用起来,附年终报告模板
  8. 无聊!为何说程序员是最实用主义?
  9. 理解ASP.NET中的三层结构
  10. Nokia的北美困局