1.12awk:文本处理语言

在了解了一些正规表示法的基础应用之后,再来呢?呵呵~两个东西可以玩一玩的,那就是 sed 跟底下会介绍的 awk 了! 这两个家伙可是相当的有用的啊!举例来说,鸟哥写的 logfile.sh 分析登录档的小程序 (第十九章会谈到),绝大部分分析关键字的取用、统计等等,就是用这两个宝贝蛋来帮我完成的!那么你说,要不要玩一玩啊?^_^

http://vbird.dic.ksu.edu.tw/linux_basic/0330regularex_2.php#sed

http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html

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

。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。

awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。

  • 用法
    • awk '程序' 文件名列表
    • awk -f 程序文件名 文件名列表
    • 程序:条件{动作}

(内置循环:awk自动对每行文本执行上述条件判断和动作)

awk '{pattern + action}' {filenames}

尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。

awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用-来格式化文本文件中的信息。

通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本

  • 处理方式
    • 输入文件的每行作为一个“记录”,变量NR就是行号
    • 每行用空格分隔开的部分,叫做记录的“域”
    • 变量$1是第1域内容,依次,$2是第2域内容,……
    • 特别的,$0指的是整个这一行的内容
    • awk的处理为:符合条件的行,执行相应的动作
  • 内置变量
    • NR 当前记录的记录编号(No. of Record)
    • $0 当前记录
    • $1, $2, …… 当前记录中的域
    • FILENAME 当前输入的文件名
  • 不指定任何条件
    • 对文本文件的所有行进行处理
  • 使用与C语言了类似的关系算符

< 小于 <= 小于或等于

== 等于 != 不等于

> 大于 >= 大于或等于

|| 条件或 && 条件与

  • 正则表达式的模式匹配 /regexpr/
    • 在文本文件所有行中检索模式
  • 特殊的条件:BEGIN和END
    • BEGIN:开始处理所有文本行之前执行
    • END:处理完所有文本行之后执行
  • 描述“动作”时,简单的用法有
    • print 变量1, 变量2,……
    • printf(”格式串”,变量1,变量2,……)
  • 自定义变量
    • 可以执行变量的累加等算数操作
    • 执行条件判断

results matching ""

    No results matching ""