awk命令

来源:互联网 发布:淘宝基金 编辑:程序博客网 时间:2024/05/21 18:18

awk是一个非常重要的命令或者认为是一种语言。因为他可以做数学运算,流程控制语句,流控制,还有样式装入的功能。

awk的语法:

  awk [ -F re] [parameter...] ['prog'] [-f progfile]
  参数说明:
  -F re:允许awk更改其字段分隔符。
  parameter: 该参数帮助为不同的变量赋值。
  'prog': awk的程序语句段。这个语句段必须用单拓号:'和'括起,以防被shell解释。这个程序语句段的标准形式为:
  'pattern '
  其中pattern参数可以是egrep正则表达式中的任何一个,它可以使用语法/re/再加上一些样式匹配技巧构成。与sed类似,你也可以使用"," 分开两样式以选择某个范围。关于匹配的细节,你可以参考附录,如果仍不懂的话,找本UNIX书学学grep和sed(本人是在学习ed时掌握匹配技术的)。 action参数总是被大括号包围,它由一系列awk语句组成,各语句之间用";"分隔。awk解释它们,并在pattern给定的样式匹配的记录上执行其操作。与shell类似,你也可以使用“#”作为注释符,它使“#”到行尾的内容成为注释,在解释执行时,它们将被忽略。你可以省略pattern和 action之一,但不能两者同时省略,当省略pattern时没有样式匹配,表示对所有行(记录)均执行操作,省略action时执行缺省的操作——在标准输出上显示。
  -f progfile:允许awk调用并执行progfile指定有程序文件。progfile是一个文本文件,他必须符合awk的语法。

  in_file:awk的输入文件,awk允许对多个输入文件进行处理。值得注意的是awk不修改输入文件。如果未指定输入文件,awk将接受标准输入,并将结果显示在标准输出上。awk支持输入输出重定向。

简单应用:

例1:显示文件testfile中含有字符串"test"的所有行:
awk '/test/ {print}' testfile

例2:显示文件testfile中第一个匹配Test或test的行与第一个匹配Moon或moon行之间
的行:
awk '/[Tt]est/,/[Mm]oon/ {print}' testfile


awk的字段:
awk的一个强大的功能是支持对字段的操作,这是grep和sed不能实现的。

所谓的字段,即是行中的一部分。在awk中,一般的情况下,将文本文件中的一行视
为一个记录,而将行中的不同部分称为“字段”。awk用$1,$2...的形式顺序的表示行中的
不同部分即不同字段。一般情况下awk将空白符视为字段间的分隔符,在awk中,用一个内
置的FS变量来确定所使用的字段分隔符。awk允许用-F先项改变默认的字段分隔符。同样,
在awk中你也可以通过修改记录分隔符变量RS来改变默认的记录分隔符。
在awk中用内置变量NR来表示当前工作的记录数。我们可以将其应用于模式匹配中用
来指定工作范围:
例3:显示文本文件testfile中第七行到第十五行中以字符%分隔的第一字段,第三字段和
第七字段:
awk -F % 'NR==7,NR==15 {printf $1 $3 $7}' testfile

原创粉丝点击