Esta intenção é lembrar da linha uniq na entrada.
como Jeff Schaller apontou, $0
é indefinido no bloco BEGIN
.
um código mais correto deve ser
{
if (data[$0]++ == 0)
lines[++count] = $0;
}
END {
for(i=1; i<count; i++)
print lines[i];
}
ou até mesmo
!data[$0]++ { lines[++count] = $0; }
END {
for(i=1; i<count; i++)
print lines[i];
}
Na primeira vez que uma linha aparecer data[$0]
será igual a 0 e line[ ]
receberá a linha.
Após o teste, data[$0]
será analisado ( ++
é uma pós-incremento) e o teste será avaliado como falso para a linha com o mesmo conteúdo.
A declaração END
imprime toda a linha em ordem.
veja também Como o awk '! A [$ 0] ++' funciona?