vamos la
agora que eu tenho um computador com linux e awk na minha frente eu posso dar exemplos melhores
vejamos, vc tem um arquivo contendo varios registros ( um por linha ) e cada registro vc tem campos ( uns 10 pelo menos ). vc tem uma regra de validação e uma regra de coerção ( quando um campo estiver vazio, substituir por x).
O que eu sugeri foi fazer
awk -opções '{ seu script }' arquivo
Primeiro vamos esclarecer as regras: vc esta procurando linhas que tenha 10 campos no total. Por isso o primeiro NF == 10
awk -opções 'NF == 10 { seu script }' arquivo
agora as regras:
se os campos 1, 2 ou 3 nao estiverem presentes,
entao deve ser considerado um erro.
caso contrario vamos imprimir os campos 1 a 3, 5 a 8
fim-se
perceba como isso se torna um if/else naturalmente
agora vc tem a repeticao muitas vezes length($x) == 0
vc pode fazer isso:
if(! length($x)) { ... }
que é equivalente.
Outra coisa: se vc precisa trocar 4 campos por NULL se estiverem vazios, vc pode fazer
for( i=5;i<=8;i++) {
if(! length($i) ) {
$i = "NULL";
}
}
entretanto aqui vc tem 5 linhas ( se vc curte uma boa legibilidade ) e um laço for que não é exatamente obvio. para verificar 4 campos eu consideraria continuar com 4 ifs seguidos. para 40 eu consideraria um loop for.
para ficar mais eloquente
function campos_presentes() {
return length($1) && length($2) && length($3);
}
function nulificar() {
if (! length($5)) {$5="NULL"}
if (! length($6)) {$6="NULL"}
if (! length($7)) {$7="NULL"}
if (! length($8)) {$8="NULL"}
}
NF == 10 {
if( campos_presentes() ) {
nulificar();
print ; # aquela coisa
} else {
print "erro, registro #",NR," tem um campo ausente";
}
}