注意:此问题仅适用于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语言定义中是否存在定义此行为的内容?