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?