Solaris awk - $ 0表现不同,具体取决于上下文

时间:2016-05-25 17:12:37

标签: awk solaris sunos

注意:此问题仅适用于Solaris的默认awk GNU awk / gawk和Solaris的XPG4 awk没有举例说明这种行为 此外,这更像是一个“ why ”问题,而不是“如何修复此”问题。

使用以下示例输入:

a 10
b 20
c 42
d 99
f 01

在我的awk脚本中,我正在提取最后一个字段$NF以用作值并使用其他所有内容作为键。为此,我设置$NF = ""并使用$0中剩余的内容作为密钥 但是,我会得到不同的结果,具体取决于我是直接使用$0还是先将其分配给变量:

awk '{
    # Extracting and removing the value
    value = $NF;
    $NF = "";

    # Copying $0 to a variable
    key = $0;

    # Displaying the difference between "key" and "$0"
    printf("key = <%s>\n", key);
    printf("$0  = <%s>\n", $0 );
    printf("\n");
}' < input.txt

这导致以下输出:

key = <a 10>
$0  = <a >

key = <b 20>
$0  = <b >

key = <c 42>
$0  = <c >

key = <d 99>
$0  = <d >

key = <f 01>
$0  = <f >

请注意,$0缺少$NF,但key仍以某种方式包含它,即使它应该是$0的直接副本。

为什么会这样?
正式awk语言定义中是否存在定义此行为的内容?

0 个答案:

没有答案