If statement 在awk if语句中发出
我似乎没有正确理解awk的说法: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 '{ 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个唯一的输入行时出错-如果您需要帮助,请告诉我们。