WEB开发网
开发学院数据库Oracle 详细分析Oracle中Trace文件的脚本 阅读

详细分析Oracle中Trace文件的脚本

 2007-05-12 12:23:34 来源:WEB开发网   
核心提示: $1 == "fred" { print $3 }awk 提供了完整的比较运算符集合,包括 "=="、"<"、">"、"<="、">=" 和 &q
  $1 == "fred" { print $3 }

awk 提供了完整的比较运算符集合,包括 "=="、"<"、">"、"<="、">=" 和 "!="。另外,awk 还提供了 "~" 和 "!~" 运算符,它们分别表示“匹配”和“不匹配”。它们的用法是在运算符左边指定变量,在右边指定规则表达式。如果某一行的第五个字段包含字符序列 root,那么以下示例将只打印这一行中的第三个字段:

  $5 ~ /root/ { print $3 }

条件语句

awk 还提供了非常好的类似于 C 语言的 if 语句。如果您愿意,可以使用 if 语句重写前一个脚本:

  {
  if ( $5 ~ /root/ ) {
  print $3
  }
  }

这两个脚本的功能完全一样。第一个示例中,布尔表达式放在代码块外面。而在第二个示例中,将对每一个输入行执行代码块,而且我们使用 if 语句来选择执行 print 命令。这两个方法都可以使用,可以选择最适合脚本其它部分的一种方法。

以下是更复杂的 awk if 语句示例。可以看到,尽管使用了复杂、嵌套的条件语句,if 语句看上去仍与相应的 C 语言 if 语句一样:

  {
  if ( $1 == "foo" ) {
  if ( $2 == "foo" ) {
  print "uno"
  } else {
  print "one"
  }
  } else if ($1 == "bar" ) {
  print "two"
  } else {
  print "three"
  }
  }

使用 if 语句还可以将代码:

  ! /matchme/ { print $1 $3 $4 }

转换成:

  {
  if ( $0 !~ /matchme/ ) {
  print $1 $3 $4
  }
  }

这两个脚本都只输出不包含 matchme 字符序列的那些行。此外,还可以选择最适合您的代码的方法。它们的功能完全相同。

awk 还允许使用布尔运算符 "||"(逻辑与)和 "&&"(逻辑或),以便创建更复杂的布尔表达式:

  ( $1 == "foo" ) && ( $2 == "bar" ) { print }

这个示例只打印第一个字段等于 foo 且第二个字段等于 bar 的那些行。

数值变量!

至今,我们不是打印字符串、整行就是特定字段。然而,awk 还允许我们执行整数和浮点运算。通过使用数学表达式,可以很方便地编写计算文件中空白行数量的脚本。以下就是这样一个脚本:

  BEGIN { x=0 }
  /^$/ { x=x+1 }
  END { print "I found " x " blank lines. " }

在 BEGIN 块中,将整数变量 x 初始化成零。然后,awk 每次遇到空白行时,awk 将执行 x=x+1 语句,递增 x。处理完所有行之后,执行 END 块,awk 将打印出最终摘要,指出它找到的空白行数量。

上一页  1 2 3 4 5 

Tags:详细 分析 Oracle

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接