0%

awk命令详解

awk功能特点

awk是一个非常重要的命令或者认为是一种语言。因为他可以做数学运算,流程控制语句,流控制,还有样式装入的功能。反正是非常强大。awk是三位创建者编写的。把awk定义为:样式扫描处理语言。

awk吸收了c语言的很多特点,与c语言有点类似。

awk的调用方式

awk提供了三种调用方式,方别是:

  1. awk命令行
    像普通的Linux命令一样使用awk,也可以在命令行中使用awk设计语言。
  2. 使用-f选项调用awk程序
    awk可以将一段awk程序脚本写入到一个文本文件中,然后使用-f选项来指定执行这个awk脚本。
  3. 利用命令解释器来调用awk程序
    利用Linux支持的命令解释器功能,可以将一段awk程序写入到文本文件中,在它的第一行加上#!/bin/awk -f,添加执行权限后,即可使用一下命令来执行:
    $awk 脚本文件名 待处理的文本

awk语法

与其他的unix命令一样,它的语法如下:
awk [ -F re] [parameter…] [‘prog’] [-f progfile][in_file…]
参数说明:
-F re,指定某字符为分隔符
parameter:该参数帮助不同的变量赋值
‘prog’: awk的程序语句段。这个语句段必须用’与’括起来。以防被shell给解释掉了。它的标准形式如下:
‘pattern {action}’
其中pattern参数可以是grep正则表达式中的任何一个,它可以使用语法/re/再加上一些样式匹配技巧构成,也可以使用”,”分开两样式以选择某个范围。。 action参数总是被大括号包围,它由一系统awk语句组成,各语句之间用”;”分隔。awk解释它们,并在pattern给定的样式匹配的记录上执行 其操作。与shell类似,你也可以使用“#”作为注释符,它使“#”到行尾的内容成为注释,在解释执行时,它们将被忽略。你可以省略pattern和 action之一,但不能两者同时省略,当省略pattern时没有样式匹配,表示对所有行(记录)均执行操作,省略action时执行缺省的操作——在 标准输出上显示。

-f profile:允许awk调用并执行progfile指定程序文件。progfile是一个文本文件,他必须符合awk的语法(注意不是shell文件)。

in_file :awk的输入文件,可以有多个。注意:awk不会修改输入文件。如果没有指定输入文件,那么默认为标准输入(屏幕

awk的记录,字段与内置变量

  1. 记录与字段
    在 awk中,缺省的情况下总是将文本文件中的一行视为一个记录,而将一行中的某一部分作为记录中的一个字段。为了操作这些不同的字段,awk借用shell 的方法,用$1,$2,$3…这样的方式来顺序地表示行(记录)中的不同字段。特殊地,awk用$0表示整个行(记录)。不同的字段之间是用称作分隔 符的字符分隔开的。系统默认的分隔符是空格。awk允许在命令行中用-F re的形式来改变这个分隔符。事实上,awk用一个内置的变量FS来记忆这个分隔符
  2. 内置变量
    awk中有好几个这样的内置变量,例如,记录分隔符变量RS、当前工作的记录数NR等等。

示例:显示文件本文件testAwk中第3行到第6行,以字符%分隔的第一个字段,第三个字段:
awk -F % 'NR==3,NR==6 {printf $1 $3}' testAwk