调用行上的Gawk错误消息失败

调用行上的Gawk错误消息失败,awk,Awk,gawk为程序调用行输出一个错误。该程序在调试模式(gawk-D-f create)下工作,但不在cygwin shell中工作。其他的gawk程序工作正常。请告诉我我做错了什么 win7-64 cygcheck 3.1.7 gawk 5.1.0, API: 3.0 (GNU MPFR 4.1.0, GNU MP 6.2.1) 节目 > create 2000_RDA.csv gawk: cmd. line:1: ./create gawk: cmd. line:1: ^

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

win7-64
cygcheck 3.1.7
gawk 5.1.0, API: 3.0 (GNU MPFR 4.1.0, GNU MP 6.2.1)
节目

 > 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

你的谢邦路线错了。要将文件用作awk脚本,必须添加
-f
选项:

#/垃圾箱/呆板-f

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

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

#/垃圾箱/呆板-f

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

cp是否创建了xxx;>xxx和>gawk-f xxx。结果与之前相同,用“xxx”替换“create”。。做了一个which/whereis,两者都找不到另一个create。注释每一行-相同的结果在问题中脚本的每一行的开头都有额外的空格,这意味着代码的复制/粘贴/执行会产生与您报告的错误不同的错误,因此隐藏了实际问题,因此我删除了这些额外的空格。正如@Shawn提到的问题是您的shebang,但最好不要使用shebang来调用awk,而只是在脚本中调用awk,请参见。@Ed Morton“#!/usr/bin/env bash gawk‘whatever’”不适用于现有代码。嵌入双引号的代码是一个问题。但是“#!/bin/gawk-f”确实有效,请参见下文。。我会调查的/usr/bin/env,我不知道它的存在,我只是好奇而已。谢谢,它确实有效(假设你在bash和gawk之间换了一条新线)——成千上万的人在数千个脚本中使用它,嵌入双引号没有任何问题(会有文字单引号,但如果你有它,有一种常见的方法来解决这个问题,而你没有)。如果您希望您的问题包含一个最低限度的脚本,该脚本演示了您这样做时遇到的问题,并告诉我们它以何种方式“不起作用”(最糟糕的问题描述,因为它没有提供任何信息),那么我们可以帮您调试它。cp是否创建了xxx;>xxx和>gawk-f xxx。结果与之前相同,用“xxx”替换“create”。。做了一个which/whereis,两者都找不到另一个create。注释每一行-相同的结果在问题中脚本的每一行的开头都有额外的空格,这意味着代码的复制/粘贴/执行会产生与您报告的错误不同的错误,因此隐藏了实际问题,因此我删除了这些额外的空格。正如@Shawn提到的问题是您的shebang,但最好不要使用shebang来调用awk,而只是在脚本中调用awk,请参见。@Ed Morton“#!/usr/bin/env bash gawk‘whatever’”不适用于现有代码。嵌入双引号的代码是一个问题。但是“#!/bin/gawk-f”确实有效,请参见下文。。我会调查的/usr/bin/env,我不知道它的存在,我只是好奇而已。谢谢,它确实有效(假设你在bash和gawk之间换了一条新线)——成千上万的人在数千个脚本中使用它,嵌入双引号没有任何问题(会有文字单引号,但如果你有它,有一种常见的方法来解决这个问题,而你没有)。如果您希望您的问题包含一个最小的脚本,该脚本演示了您在执行该操作时遇到的问题,并告诉我们它以何种方式“不起作用”(最糟糕的问题描述,因为它没有提供任何内容),那么我们可以帮您调试它。
 #! /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); }
    }
 }