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, которое определяет это поведение?