awk -F '|' '{ fname = $1 ? $1 : "BAD"; print >fname }' file
Isso define a variável fname para o valor da primeira coluna, se existir, caso contrário, para BAD . A linha é impressa nesse nome de arquivo.
Se você tiver muito valores diferentes na primeira coluna, talvez queira fechar os arquivos de saída entre cada instrução print para não ficar sem descritores de arquivo:
awk -F '|' '{ fname = $1 ? $1 : "BAD"; print >>fname; close fname }' file
Observe que agora precisamos abrir o arquivo no modo de acréscimo com >> .