Awk uma mão na roda

O Awk é uma mão na roda quando queremos transformar um arquivo csv em uma sequência de comandos sql.

Linguagem de relatórios , ela executa o bloco de código ** { action } ** para cada linha do arquivo, o que torna ótimo para converter arquivos csv em sql.

A forma simples de usar o awk é:

1
awk -F";" '{print "update tabela set valor=" $2 "where id =" $1 ";"}' arquivo.csv

O operador de concatenação de strings em awk é o espaço em branco e $1 representa a primeira coluna.

O comando acima é para ser executado sobre um arquivo (arquivo.csv) com colunas separadas por ; , definido com o parâmetro -F, onde a primeira coluna tem o id e a segunda tem o valor.

Você também pode criar arquivo com código, abaixo segue um exemplo para tratar celulares.

Gerando um arquivo sql de um csv

Imagine o seguinte problema , você precisa atualizar uma tabela a partir de um arquivo csv que contém o celular e o cpf das pessoas.

Entretanto os dados estão sujos porque algunas números de celular tem ddd, outros tem apenas 8 digitos e vocẽ precisa limpar os dados.

Neste momento o awk brilha com este pequeno código você pode tratar este problema:

1
2
3
4
5
6
7
8
9
10
11
12
{
celular = strtonum($4)
if (length(celular) == 8) {
celular = $3 "9" celular
} else if (length(celular) == 9) {
celular = $3 celular
}

if (length(celular) == 11) {
print "update tabela set celular ='" celular "' where cpf = '" $1 "'; -- " $2
}
}

Para chamar o código:

1
$ awk -F";" -f gerar-update-ddd.awk celulares.csv > udpate-celulares.sql

As colunas do arquivo celulares.csv:

1
cpf;nome;ddd;celular

Caso queira pular você pode usar a variável NR (if (NR !=1 ) { action } ) ou usar o tail celulares.csv -n+1 | awk …``` .