Inicial > GNU/Linux, Software Livre > Filtrando texto com AWK

Filtrando texto com AWK

Nestes últimos dias precisei tratar alguns dados exportados de uma base LDAP e, a partir destes, gerar um arquivo CSV. Seguem os comandos executados com as devidas explicações.

Só para facilitar o entendimento, explico antes os nomes dos arquivos:

ldapteste2.ldif – arquivo com os dados exportados do LDAP

ldapteste2.csv – arquivo de saída gerado após o tratamento dos dados

$ awk -v OFS=';' '{split($0,a,": ")} /^uid/{uid=a[2]} /^cn/{cn=a[2]} /^department/{dep=a[2]; print uid, cn, dep}' ldapteste2.ldif >> ldapteste2.csv

Explicando os parâmetros:

-v OFS=';'

A sintaxe é -v var=val -> o -v é para setar uma variável antes do início do programa. Neste caso, a variável “OFS” recebeu o valor “;”.
Variável “OFS”
Output Field Separator -> indica o caracter que será usado para separar os campos na saída. O padrão é o espaço. No meu caso, usei o “;”.

'{split($0,a,": ")} /^uid/{uid=a[2]} /^cn/{cn=a[2]} /^department/{dep=a[2]; print uid, cn, dep}'

O código acima foi aplicado em um conjunto de registros que estavam no formato abaixo (cada 4 linhas representam um registro do arquivo LDIF exportado da base LDAP):

dn: CN=FULANO DE TAL,OU=RJ,O=BR
cn: FULANO DE TAL
uid: FDTAL
department: VENDAS/RJ

A saída gerada ficou da seguinte forma:

FDTAL;FULANO DE TAL;VENDAS/RJ

Explicando:
O que está entre chaves são os comandos, declarações e funções da linguagem AWK
1ª parte: {split($0,a,”: “)}
O “$0” indica que a função “split” vai ler o registro inteiro (as 4 linhas) e armazená-lo na matriz “a”. O separador dos campos do registro é o “: “. Assim, será gerada uma matriz de 4 linhas e 2 colunas. Na 1ª coluna estarão os valores que estão antes do separador e na 2ª coluna os valores que estão depois.

2ª parte: /^uid/{uid=a[2]} /^cn/{cn=a[2]} /^department/{dep=a[2]; print uid, cn, dep}
/^uid/{uid=a[2]} -> pesquisa no registro o campo que começa com a string “uid” e atribui a variável “uid” o valor da segunda coluna correspondente no array. No exemplo, a variável “uid” recebe o valor FDTAL. O mesmo será feito para os demais campos (“cn” e “department”).
Por fim, é feito o print das variáveis (“uid”, “cn” e “dep”), na saída padrão ou redirecionando para um arquivo, se desejar.

Referências:

  1. Nenhum comentário ainda.
  1. No trackbacks yet.

Deixe um comentário

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.