Solaris awk - $0 ведет себя по-разному в зависимости от контекста

Примечание. Эта проблема относится только к стандартному awk для Solaris.
GNU awk / gawk и Solaris XPG4 awk не являются примером такого поведения.
Кроме того, это скорее вопрос "почему", а не вопрос "как мне это исправить".


Используя следующий пример ввода:

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 ответов

Другие вопросы по тегам