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 >>
.