Для доступа к значению переменной в awk вы просто используете имя переменной, как в C и большинстве других языков, основанных на Алголе. Вы не ставите перед ним $
, как если бы вы делали это с ракушкой. Попробуйте изменить:
$lastline != "" && $4 != $lastID
на:
lastline != "" && $4 != lastID
et c.
Это может быть то, что вы пытаетесь сделать (ваш раздел BEGIN делал ничего полезного, поэтому я просто удалил его):
awk '
(lastline != "") && ($4 != lastID) {
print lastline
lastline=""
}
$3 == "+" {
if ($4 == lastID) {
lastli=""
}
else {
print $0
lastline=""
}
}
$3 == "-" {
lastline=$0
}
{ lastID=$4 }
' file
При таком разумном форматировании вы можете видеть, что lastli
никогда не используется нигде, кроме тех, где он установлен на ""
, так что, вероятно, это ошибка - возможно, это предполагается, что это lastline
, и в этом случае его можно сделать общим, а не устанавливать в обеих ветках if
и else
?