1.简介
 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。
 简单来说awk就是把文件逐行读入,默认以空格为分隔符将每行切片,切开的部分再进行各种分析处理。

2.使用方法

awk '{pattern + action}' {filenames}

其中 pattern 表示 awk 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。

花括号 {} 不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。
pattern就是要表示的正则表达式,用斜杠括起来。

  • awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息
  • awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息
  • 通常,awk是以文件的一行为处理单位的,awk每接收文件的一行,然后执行相应的命令,来处理文本。

3.调用awk
3.1.命令行方式

awk [-F  field-separator]  'commands'  input-file(s)

其中,commands 是真正awk命令,[-F域分隔符]是可选的。 input-file(s) 是待处理的文件。
  在awk中,文件的每一行,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。

3.2.将所有的awk命令插入一个单独文件,然后调用:

awk -f awk-script-file input-file(s)

  其中,-f选项加载awk-script-file中的awk脚本,input-file(s)跟上面的是一样的。   
4.入门实例 
 需求:只显示 /etc/passwd 的账户和账户对应的shell,而账户与shell之间以逗号分割,而且在所有行添加列名name,shell,在最后一行添加 "blue,/bin/nosh"。

#cat /etc/passwd |awk  -F ':'  'BEGIN {print "name,shell"}  {print $1","$7} END {print "blue,/bin/nosh"}'
  name,shell
root,/bin/bash
daemon,/bin/sh
....
blue,/bin/nosh
  • 先执行BEGIN,然后读入有 /n 换行符分割的一条记录,然后将记录按指定的域分隔符划分域。
  • -F指定域分隔符为':',默认域分隔符是"空白键" 或 "[tab]键"
  • 填充域,$0 表示所有域,$1表示第一个域,$n表示第n个域,
  • 随后开始执行模式所对应的动作 action 即{print $1","$7}。
  • 接着开始读入第二条记录······
  • 直到所有的记录都读完,最后执行END操作。

需求:搜索/etc/passwd有 root 关键字的所有行,并显示对应的shell

# awk -F: '/root/{print $7}' /etc/passwd 

/bin/bash
 其中, /root/ 中的 root 是awk的pattern(匹配包含root的行),表示要查找的数据。awk中的action是{print $7}

最新文章

  1. active_record的不定时更新
  2. 基于<MediaElement>的WPF视频播放器(可拖拽进度条播放)【1】
  3. MySQL各版本的区别
  4. Solved: Qt Library LNK 2001 staticMetaObject error
  5. Qt与VC编程合作起龌龊
  6. oracle查询一个数据库有几张表
  7. Codeforces Round #239 (Div. 2)
  8. [2015更新]用Word2007写CSDN博客
  9. map的例子
  10. BZOJ1699: [Usaco2007 Jan]Balanced Lineup排队
  11. JAVA数据类型与DB2、Oracle、Sybase以及SQL Server对应关系
  12. 常见的 http 状态码
  13. 剑指offer_数组中的逆序对
  14. 用自定义注解实现fastjson序列化的扩展
  15. Jquery点击除了指定div元素其他地方,隐藏该div
  16. 痞子衡嵌入式:常用的数据差错控制技术(3)- 和校验(Checksum)
  17. day-06数据类型与深浅拷贝
  18. UE4行为树
  19. AppiumLibrary常用关键字
  20. JS创建对象之构造函数模式

热门文章

  1. 一文彻底解决Ubuntu上PHP的安装以及版本切换
  2. iermu爱耳目
  3. JUnit常用断言及注解
  4. img元素的alt和title的区别?
  5. VC 常用资源
  6. Intellij idea中maven加载jar包很慢的解决方案.
  7. Spring Boot 编写入门程序
  8. 15.Update Documents-官方文档摘录
  9. Python并行编程(九):线程通讯queue
  10. 需求-shidebing