linuxawk一看就懂分析.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
linux awk 看就懂 awk 是 linux 环境下的一个命令行工具,但是由于 awk 强大的能力,我们可以为 awk 工具传 递一个字符串,该字符串的内容类似一种编程语言的语法,我们可以称其为 Awk 语言,而 awk 工具本身则可以看作是 Awk 工具本身则可以看作是 Awk 语言的解析器。就好比 python 解析器与 Python 语言的关系。我 由于 由于 awk 天生提供对文件中文本分列进 ( 常见的是空格 ) 隔开,我们可以将这个 awk 进行处理,其实 awk 在工作中很多 们一般使用 awk 来做什么, awk 又适合做什么工作呢 行处理,所以如果一个文件中的每行都被特定的分隔符 文件看成是由很多列的文本组成,这样的文件最适合用 时候被用来处理 log 文件,进行一些统计工作等。 awk 命令的一般组成 awk 最常用的工作一般是遍历一个文件中的每一行,然后分别对文件的每一行进行处理,一个 完整的 awk 命令形式如下: awk [options] 'BEGIN{ commands } pattern{ commands } END{ commands }' file 其中 options 表示 awk 的可选的命令行选项,其中最常用的恐怕是 -F 它指定将文件中每一 行分隔成列的分隔符号。而紧接着后面的单引号里面的所有内容是 awk 的程序脚本, awk 需要 对文件每一行分割后的每一列做处理。 file 则是 awk 要处理的文件名称。 让我们通过 demo 来 体会 awk 的功能。 awk 对每一行进行分割处理 echo '11 22 33 44' | awk '{print $3" "$2" "$1}' 输出: 33 22 11 我们将字符串 11 22 33 44 通过管道传递给 awk 命令,相当于 awk 处理一个文件,该文件 的内容就是 11 22 33 44 上面的命令中我们并没有添加 -F 指定分割符号,实际上默认情况 下 awk 使用空格分割每一行, 如果需要指定别的字符则使用 -F 显示指定。上面的命令是将 11 22 33 44 通过空格 ( 不管列之间有多少个空格都将当作一个空格处理 ) 分割成 4 列,在 awk 中有 一种通过 $数字 引用的变量,这种变量引用的内容就是当前行中分割的每一列的内容,数字 的序号从 1 开始,例如 $1 表示第 1 列的内容, $2 表示第二列,以此类推。 $0 表示当前整行的 内容。 print 是 awk 的内置函数,用于打印出变量的值。 而我们在 $3 $2 $1 之间添加了用 双引号引起来的空格,如果没有,则这些变量的值打印出来会连在一起。这里的 awk 命令中 {} 里面的内容实际上是我们上面完整模式的中间部分,我们省略了上面的 BEGIN 块, END 块,并 且中间的程序块我们也省略掉了 pattern 部分,也就是如果不添加 BEGIN 或者 END 说明那么 该程序块就是上面完整模式中的中间的那个程序块, 该中间的程序块所执行的操作就是循环处理 文件内容的每一行,如果文件有 10 行,那么中间的程序块要运行 10 次,每一次处理一行的内 容,并且处理完当前行之后,下次循环会自动依次处理接下来的行内容。 我们来看看,如果有两列是什么效果呢,例如: echo -e '11 22 33 44\naa bb cc dd' | awk '{print $3" "$2" "$1}' 输出: 33 22 11 cc bb aa 注意这里 echo 命令使用了 -e 选项的目的就是为了保持字符串中的 \n 的格式能够生效, 否则该 换行将被忽略。那么上面的命令是如何执行的呢,我们模拟一下 awk 的执行过程,首先 awk 读 取第一行的内容,使用空格分隔该行中的列, 并将字符串 11 赋值给 $1 ,22 赋值给 $2 ,33 赋值 给$3 ,44 赋值给 $4 。然后通过 print 打印出来。接着读取第二行的内容,同样执行上面的操 作。 使用 parttern 部分 我们已经学习了 awk 最简单的命令, 下面我们再加一点东西进去, 在程序块的前面添加 pattern 部分,例如: echo -e '1 2 3 4\n5 6 7 8' | awk '$1>2{print $3" "$2" "$1}' 输出: 7 6 5 该程序与上面的程序几乎一样, 只不过我们在程序块前面添加了 $1>2 表示如果当前行的第 1 列的值大于 2 则处理当前行, 否则不处理。 说白了 pattern 部分是用来从文件中筛选出需要处 理的行进行处理的,如果没有则循环处理文件中的所有行。 pattern 部分可以是任何条件表达 式的判断结果,例如 >,<

文档评论(0)

dajiede + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档