【发布时间】: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