【问题标题】:Suppressing system command called from awk script抑制从 awk 脚本调用的系统命令
【发布时间】:2015-08-31 11:25:48
【问题描述】:

我目前正在 Windows 7 中运行此脚本。

所以,我有一个程序,用于对另一个命令 (mkmk) 的输出进行颜色编码,并统计不同数量的错误和其他值得注意的统计数据等。所以现在,它以批处理文件的形式开始

  1. 关闭回声
  2. 为变量设置一些颜色值
  3. 同时调用 mkmk 命令和 awk 脚本

awk 脚本然后逐行解析,并调用一个函数,然后调用一个执行着色的 exe。工作方式如下:

/: error/ {
    CntError++ ;
    TraError[CntError] = $0;
    colorf(cErrorDcb,$0) ;
    next
}    

function colorf(fg, str ) {
   if ( Couleur < 1 )
   {
     printf("%s\n",str);
   }     
   else
   { 
      if ( System == "UNIX" )
      {
         printf("%s%s%s%s\n",fg,bg,str,NORMAL);
      }
      else 
      {
         system("Colorize.exe /c:" fg " \""  str "\"");
         printf("\n");
      }
   }
}

所以,一切正常,除了每次调用 system("Colorize.exe") (很多)时,命令都会在终端中输出并弄乱输出。它似乎不受我的批处理文件中的 @echo off 命令的影响,因为它是在 awk 脚本中调用的。有没有办法只隐藏这些系统命令,但保留我的 awk 输出的其余部分?

【问题讨论】:

  • 您是否尝试将@echo off 添加到system() 调用中?
  • 我尝试在字符串的开头和结尾添加@echo off,但到目前为止它对我不起作用。我已修改问题以表明我在 Windows 7 上运行它。

标签: windows awk system


【解决方案1】:

我不知道神奇的 Windows 咒语是什么来控制终端上显示的内容,但通常不是调用 system() 并让它调用的命令产生它自己的输出,这些输出与 awk 输出混合在一起,而是使用 @ 987654322@ 读取调用结果以填充变量,然后从 awk 打印该结果。像这样的:

/: error/ {
    TraError[++CntError] = $0
    print colorf(cErrorDcb,$0)
    next
}    

function colorf(fg, str,         cmd, line, colorStr) {
   if ( Couleur < 1 ) {
      colorStr = str
   }     
   else if ( System == "UNIX" ) {
      colorStr = fg bg str NORMAL
   }
   else {
      cmd = "Colorize.exe /c:" fg " \""  str "\""
      colorStr = ( (cmd | getline line) > 0 ? line : str )
      close(cmd)
   }
   return colorStr
}

我也去掉了所有无用的分号。

最佳建议 - 获取 cygwin

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 2017-12-21
    相关资源
    最近更新 更多