CMD中的gawk命令&&操作员不工作

时间:2016-07-03 13:39:01

标签: cmd cygwin gawk

我正在从Windows CMD发出gawk命令,但它只是卡在那里.Sig命令在Cygwin终端中运行得非常好。 我试图在行号30之后的文件的第一列上找到第一次出现的结尾括号“}”

命令是

gawk 'NR > 30 &&  /^}$/ { print NR; exit }' Filename.c > Output.txt

我注意到另一件事,当我发出命令格式CMD时,除了粘贴它创建一个名称为行号的文件(如果执行上面的命令,则创建30)

2 个答案:

答案 0 :(得分:0)

命令行

gawk 'NR > 30 && /^}$/ { print NR; exit }' Filename.c > Output.txt
由于两个原因,Windows命令解释器不会按预期解释

  1. 与Unix和Linux shell相比,直接单引号在Windows命令行中没有特殊含义。因此,两个单引号中的字符串不会像Unix / Linux中的shell一样被解释为单个参数字符串。

  2. gawk的参数字符串包含几个在Windows命令进程中具有特殊含义的字符:

  3. 在打开命令提示符窗口并运行cmd /?时,Windows命令解释程序的简要帮助将在多个页面上输出。最后一个帮助页面的最后一段列出了目录/文件名或其他字符串中的哪些字符需要用直接双引号括起名称/字符串。

    因此Windows命令行的标准解决方案将使用

    gawk.exe "NR > 30 && /^}$/ { print NR; exit }" Filename.c > Output.txt
    

    但这也不会产生预期的结果。我想,但不确定,gawk从Unix / Linux移植到Windows而不适应单引号和双引号的解释。

    因此需要另一种解决方案,即使用单引号并转义gawk参数字符串中的每个特殊字符,以便Windows命令解释器将其解释为文字字符。

    gawk.exe 'NR ^> 30 ^&^& /^^}$/ { print NR; exit }' Filename.c > Output.txt
    

    此命令行使得带有参数字符串的Unix / Linux控制台应用程序gawk在Windows中也可以在Windows命令进程中运行。

答案 1 :(得分:0)

避免Windows引用地狱的标准建议是将awk脚本(在本例中为NR > 30 && /^}$/ { print NR; exit })存储在一个文件中(例如名为script.awk)并将其作为awk -f script.awk Filename.c > Output.txt执行。

相关问题