AWK imprime registros para separar arquivos pela coluna e substitui essa coluna com valor quando nula

0

Eu preciso dividir um arquivo grande pelo primeiro valor da coluna e quando essa coluna é nula, substitua o nulo por um valor e ainda crie um arquivo a partir desses registros inválidos. Eu tentei algo como

awk -F'|' '{print match($1,/^ /) > $1 : "BAD"} $FILENAME

mas é claro que isso não funciona.

A|123|zxy
B|321|zyx
|345|abc
A|456|zys

Crie 3 arquivos: A , B e BAD

    
por mrlddst 06.03.2018 / 21:14

1 resposta

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

    
por 06.03.2018 / 21:20