【问题标题】:How to use --enable-switch in a bash script having AWK statement如何在具有 AWK 语句的 bash 脚本中使用 --enable-switch
【发布时间】:2016-04-26 00:18:48
【问题描述】:

刚刚发现我在“awk”中使用 switch-case 的问题与这个知识库中的完全一样:

switch/case doesn't work in awk

现在我在 bash 脚本中使用我的 awk 语句,而不是将它作为单独的 AWK 脚本文件运行。考虑到我如何在我的 bash 脚本中使用--enable-switch。这是我的脚本的结构:

#! bin/ksh
. ~/.profile
// bash if-else statements to perform some tasks
/usr/bin/awk '
BEGIN {
        // array[] defined
}

// some statements
function printmsg(msg) {
         switch(1) {
         case /pattern1/:
              print msg
              break
         case /pattern2/:
              print msg
              break
         }
}' file

我在哪里可以强制执行--enable-switch

我的 GAWK 版本是gawk-3.1.5-16.el5

【问题讨论】:

  • 我认为你是对的。所以我现在唯一的选择是将它们更改为几个 if-else 语句:)
  • 根据我对 3.1.7 的 gawk 手册页的解释,--enable-switch 选项是编译时选项而不是运行时命令行选项,除非它首先使用 --enable-switch 选项编译.我安装了 4.1.3 版本,switch 是一个有效的 控制语句 并且不需要使用它。因此,如果--enable-switch 选项不起作用,我相信您要么需要使用将switch 编译成可执行文件的更高版本,要么您需要获取您正在使用的版本的源代码,并且使用--enable-switch 选项编译它。

标签: linux bash awk gawk


【解决方案1】:

您使用的是非常旧的 gawk 版本,从 4.0 开始默认启用 switch 语句,而我们现在使用的是 4.1.something。您缺少很多非常有用的功能(比 switch 语句更有用,请参阅 http://www.gnu.org/software/gawk/manual/gawk.html#Feature-History),所以换一个新的 gawk。

话虽如此,您可以在安装新 gawk 后继续使用 switch(),但恕我直言,这不值得让您的脚本专门用于 gawk,如果这是您唯一的 gawk 特定功能,只需将其重写为 if-elses正在使用。

【讨论】:

  • Yes 将它们更改为一组 if-else。在我们的许多系统上运行的 RHEL 版本是 5.x,并且所有系统的 gawk 都小于 4.x,因此没有必要保持脚本 gawk 特定
猜你喜欢
  • 2015-05-31
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-08
  • 1970-01-01
  • 1970-01-01
  • 2014-09-13
相关资源
最近更新 更多