If statement 在awk if语句中发出

If statement 在awk if语句中发出,if-statement,awk,syntax,If Statement,Awk,Syntax,我似乎没有正确理解awk的说法: awk '{ trailing=""; if ($0 ~ / /) trailing="#"; printf("# %s\n#elements/%s%s\n", $0, $0, trailing) > $0".txt" }' file 我得到这个错误: awk: syntax error at source line 1 context is { trailing=""; if ($0 ~ / /) trailing="#"; printf("

我似乎没有正确理解awk的说法:

awk '{ trailing=""; if ($0 ~ / /) trailing="#"; printf("# %s\n#elements/%s%s\n", $0, $0, trailing) > $0".txt" }' file
我得到这个错误:

awk: syntax error at source line 1
 context is
    { trailing=""; if ($0 ~ / /) trailing="#"; printf("# %s\n#elements/%s%s\n", $0, $0, trailing) > >>>  $0".txt" <<<
awk: illegal statement at source line 1
awk:源代码第1行出现语法错误
上下文是

{trailing=“”;如果($0~/)trailing=“#”printf(“#%s\n#elements/%s%s\n”,$0,$0,trailing)>>>>>$0.txt”由于源输入文件未发布,因此无法测试,请尝试将
$0.txt”
包装为
($0.txt”)
,如下,然后告诉我

awk '{ trailing=""; if ($0 ~ / /) trailing="#"; printf("# %s\n#elements/%s%s\n", $0, $0, trailing) > ($0".txt") }' Input_file

由于源输入文件未发布,因此无法测试它,请尝试将
$0.txt“
包装为
($0.txt”)
,如下所示,然后通知我

awk '{ trailing=""; if ($0 ~ / /) trailing="#"; printf("# %s\n#elements/%s%s\n", $0, $0, trailing) > ($0".txt") }' Input_file

就是这样。我想知道为什么我们需要一个
()
围绕这个字符串表达式。@codeforester输入或输出重定向右侧的未解析表达式应该如何解释是POSIX未定义的行为。因此给定
print>foo bar
awk可以将其解释为
print>(foo bar)
如您所愿,但它也可以将其解释为
(print>foo)bar
,就像这个特定的awk所做的那样,因此给出了一个语法错误,并且仍然符合POSIX。只要始终在输入或输出重定向的右侧插入任何表达式,以实现可移植性(这也有助于澄清,这样做是双赢的)。就是这样。我想知道为什么我们需要一个
()
围绕这个字符串表达式。@codeforester输入或输出重定向右侧的未解析表达式应该如何解释是POSIX中未定义的行为。因此给定
print>foo bar
awk可以将其解释为
print>(foo bar)
如您所愿,但它也可以将其解释为
(print>foo)bar
,就像这个特定的awk所做的那样,因此给出了一个语法错误,并且仍然符合POSIX。只要始终在输入或输出重定向的右侧插入任何表达式,以实现可移植性(这也有助于澄清,这样做是双赢的)。这不是问题所在,但仅供参考。
trailing=“”;如果($0~//)trailing=“#”
相当于
trailing=(/?“#”):“)
。此外,由于您没有使用GNU awk,您的脚本将因“打开的文件太多”而失败当您通过大约20个唯一的输入行时出错-请告诉我们这是否是您需要帮助的问题。这不是问题所在,但仅供参考。
trailing=“”;if($0~//)trailing=“#”
相当于
trailing=(/?“#]:”)
。此外,由于您没有使用GNU awk,您的脚本将因“打开的文件太多”而失败当您通过大约20个唯一的输入行时出错-如果您需要帮助,请告诉我们。