AWK基本示例

广告位

本教程将介绍一些有用的AWK例子以及命令。考虑我们有一个文本文件marks.txt将要被处理,它有以下内容: …

本教程将介绍一些有用的AWK例子以及命令。考虑我们有一个文本文件marks.txt将要被处理,它有以下内容:

  1)AmitPhysics80  2)RahulMaths90  3)ShyamBiology87  4)KedarEnglish85  5)HariHistory89 

打印的列或字段

我们可以指示AWK从输入字段只打印某些列。下面简单的例子说明了这一点:

  [jerry]$ awk '{print $3 "t" $4}' marks.txt

在执行上面的代码后,得到以下结果:

  Physics80  Maths90  Biology87  English85  History89 

在我们的marks.txt文件中第3列包含科目名和第四列包含特定科目标记。这里使用AWK的printf命令打印这两列。在上面的例子中$3 和 $4 表示从输入记录在第三和第四个字段。

打印所有行

默认情况下AWK打印所有匹配模式行。

  [jerry]$ awk '/a/ {print $0}' marks.txt

在执行上面的代码后,得到以下结果:

  2)RahulMaths90  3)ShyamBiology87  4)KedarEnglish85  5)HariHistory89 

在上面的例子中,我们正在寻找形式模式a,当模式匹配从所述主体块通过执行命令。在没有主体块- 默认采取动作是打印记录。因此,下面的命令也产生相同的结果:

  [jerry]$ awk '/a/' marks.txt

通过模式打印列

我们已经看到,当模式匹配成功在默认情况下AWK打印全部记录。但是,我们可以指示AWK只打印某些字段。比如下面的例子打印第三和第四字段,当模式匹配成功。

  [jerry]$ awk '/a/ {print $3 "t" $4}' marks.txt

在执行上面的代码后,得到以下结果:

  Maths90  Biology87  English85  History89 

按任何顺序打印列

可以以任何顺序打印列?是的!当然,我们可以做到这一点。比如下面的例子打印第4列后是第3列。

  [jerry]$ awk '/a/ {print $4 "t" $3}' marks.txt

在执行上面的代码后,得到以下结果:

  90Maths  87Biology  85English  89History 

计算并打印匹配模式

让我们试着一个有趣的例子,我们将计算并打印行的数量,模式匹配成功的数量。

  [jerry]$ awk '/a/{++cnt} END {print "Count = ", cnt}' marks.txt

在执行上面的代码后,得到以下结果:

  Count = 4 

在上面的例子中,我们增加计数器的值在模式匹配成功时,打印END块这个值。请注意,不像其他的编程语言,这里不需要声明变量就可以直接使用它。

打印超过18个字符的行

仅打印那些含有多于18个字符的行。

  [jerry]$ awk 'length($0) > 18' marks.txt

在执行上面的代码后,得到以下结果:

  3)ShyamBiology87  4)KedarEnglish85 

AWK提供了内置的长度函数返回字符串的长度。$0 变量存储整行,并在没有主体块默认采取动作即打印操作。因此,如果一行超过18个字符,比较结果为true那么这一行将被打印出来。

贺, 贺朝

关于作者: 贺朝

为您推荐