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