【问题标题】:Gawk error message fails on invocation lineGawk 错误消息在调用行失败
【发布时间】:2021-06-10 19:59:11
【问题描述】:
win7-64
cygcheck 3.1.7
gawk 5.1.0, API: 3.0 (GNU MPFR 4.1.0, GNU MP 6.2.1)

gawk 为程序调用行输出错误。该程序在调试模式下工作(gawk -D -f create),但不能在我的 cygwin shell 中工作。其他 gawk 程序运行良好。请告诉我我做错了什么?

 > create 2000_RDA.csv
   gawk: cmd. line:1: ./create
   gawk: cmd. line:1: ^ syntax error
   gawk: cmd. line:1: ./create
   gawk: cmd. line:1:   ^ unterminated regexp

程序

 #! /bin/gawk

 BEGIN {
    outputLine[1] = "   const string ";
    outputLine[2] = " [] = { "
    outputLine[4] = "                           , "
    outputLine[5] = "                           }\n"
 }
 BEGINFILE {
    line = 1;
    name = "y"  gensub(/_RDA.csv$/, "", "g", FILENAME);
    printf("%s%s%s", outputLine[1], name, outputLine[2]);
 }
 ENDFILE {
    printf("%s", outputLine[5]);
 }
 {
    if (($0  ~ /^[[:digit:]]/)) {       # begins with a number
       if (line == 1) { printf("\"%s\"\n", $0); line = 0; }
       else           { printf("%s\"%s\"\n", outputLine[4], $0); }
    }
 }


 

【问题讨论】:

  • cp是否创建了xxx; > xxx 和 > gawk -f xxx。结果与以前相同,用“xxx”替换“create”.. 做了一个 which/whereis,都无法找到另一个创建。评论每一行 - 结果相同
  • 在您的问题中脚本的每一行开头都有额外的空白意味着您的代码的复制/粘贴/执行产生的错误与您报告的错误不同,因此隐藏了实际问题,所以我删除了那些额外的空白。正如@Shawn 提到的那样,问题出在你的shebang,但最好不要使用shebang 来调用awk,而只需在脚本中调用awk,请参阅stackoverflow.com/a/61002754/1745001
  • @Ed Morton "#!/usr/bin/env bash gawk 'whatever '" 不适用于现有代码。嵌入双引号的代码是一个问题。但是“#!/bin/gawk -f”确实有效,见下文。我将研究#!/usr/bin/env,不知道它存在,我只是很好奇。谢谢
  • 是的,它确实有效(假设你在 bash 和 gawk 之间放置了一个换行符)——成千上万的人在数千个脚本中使用它,并且嵌入双引号没有问题(会有文字单引号,但如果你有这个问题,有一种常见的方法可以解决这个问题,但你没有)。如果您edit 您的问题包括一个最小的脚本来演示您遇到的问题并告诉我们它以何种方式“不起作用”(最糟糕的问题描述,因为它没有提供任何继续)然后我们可以提供帮助你调试它。

标签: awk


【解决方案1】:

你的 shebang 线是错误的。要将文件用作 awk 脚本,您必须添加 -f 选项:

#!/bin/gawk -f

Shebang 行通过将脚本文件的路径名和传递给脚本的参数附加到该行来工作,因此运行 create 2000_RDA.csv 变为 /bin/gawk ./create 2000_RDA.csv,这意味着 gawk./create 视为 awk 代码跑步。添加-f 使其成为/bin/gawk -f ./create 2000_RDA.csv,它将执行文件中的代码(现在是-f 的参数)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 2015-10-15
    相关资源
    最近更新 更多