gershwin.pages.dev

Como usar awk para validar CPF em coluna de arquivo

Validar CPFs manualmente em grandes arquivos de dados é uma tarefa demorada e propensa a erros. Utilizar o awk permite automatizar esse processo diretamente na linha de comando, garantindo precisão e rapidez na verificação dos dígitos verificadores.

Pré-requisitos

Passo 1: Entendendo a lógica de validação de CPF

O CPF brasileiro possui 11 dígitos, sendo os dois últimos os dígitos verificadores. A validação é feita através de um cálculo matemático que envolve multiplicações e divisões por 11. O awk permite implementar essa lógica diretamente no processamento do arquivo.

Passo 2: Criando o script awk para validação

O script awk a seguir lê um arquivo onde o CPF está na primeira coluna, valida os dígitos verificadores e imprime o CPF seguido de "VÁLIDO" ou "INVÁLIDO".

awk 'BEGIN { FS = "," }
{
    cpf = $1
    gsub(/[^0-9]/, "", cpf)
    if (length(cpf) == 11) {
        cpf_sem_digitos = substr(cpf, 1, 9)
        dv1 = 0
        dv2 = 0
        for (i = 1; i <= 9; i++) {
            dv1 += substr(cpf_sem_digitos, i, 1) * (11 - i)
        }
        dv1 = 11 - (dv1 % 11)
        if (dv1 >= 10) dv1 = 0
        cpf_com_digito1 = cpf_sem_digitos dv1
        for (i = 1; i <= 10; i++) {
            dv2 += substr(cpf_com_digito1, i, 1) * (12 - i)
        }
        dv2 = 11 - (dv2 % 11)
        if (dv2 >= 10) dv2 = 0
        if ((dv1 == substr(cpf, 10, 1)) && (dv2 == substr(cpf, 11, 1)))
            print cpf " VÁLIDO"
        else
            print cpf " INVÁLIDO"
    } else {
        print cpf " INVÁLIDO"
    }
}' arquivo.csv

Passo 3: Executando o script no arquivo

Para executar o script awk no seu arquivo, substitua "arquivo.csv" pelo nome do seu arquivo. O comando processará cada linha, extrairá o CPF da primeira coluna, removerá qualquer caractere não numérico e validará os dígitos verificadores.

Passo 4: Salvando a saída em um novo arquivo

Para salvar os resultados em um novo arquivo, basta redirecionar a saída do comando awk:

awk 'BEGIN { FS = "," }
{
    cpf = $1
    gsub(/[^0-9]/, "", cpf)
    if (length(cpf) == 11) {
        cpf_sem_digitos = substr(cpf, 1, 9)
        dv1 = 0
        dv2 = 0
        for (i = 1; i <= 9; i++) {
            dv1 += substr(cpf_sem_digitos, i, 1) * (11 - i)
        }
        dv1 = 11 - (dv1 % 11)
        if (dv1 >= 10) dv1 = 0
        cpf_com_digito1 = cpf_sem_digitos dv1
        for (i = 1; i <= 10; i++) {
            dv2 += substr(cpf_com_digito1, i, 1) * (12 - i)
        }
        dv2 = 11 - (dv2 % 11)
        if (dv2 >= 10) dv2 = 0
        if ((dv1 == substr(cpf, 10, 1)) && (dv2 == substr(cpf, 11, 1)))
            print cpf " VÁLIDO"
        else
            print cpf " INVÁLIDO"
    } else {
        print cpf " INVÁLIDO"
    }
}' arquivo.csv > resultado_validacao.txt

Exemplo Prático

CPF (Entrada) Resultado (Saída)
123.456.789-09 12345678909 INVÁLIDO
529.982.247-25 52998224725 VÁLIDO
111.111.111-11 11111111111 INVÁLIDO
529.982.247-25 52998224725 VÁLIDO

Conclusão

Com este método, você automatiza a validação de CPFs em segundos, eliminando a necessidade de processamento manual e reduzindo significativamente a chance de erros. O awk oferece uma solução poderosa e eficiente para tarefas de processamento de dados em arquivos de texto.