Manipulação de lista de dados multilinha (arquivo ldif) com awk ou outra ferramenta

4

Estou tentando manipular um arquivo ldif com várias entradas. Meu objetivo é analisar esse arquivo ldif existente, extraindo os atributos "givenName" e "sn", para gerar um atributo "mail". Eu estava pensando em AWK ou Sed, mas infelizmente não sou especialista nas duas boas ferramentas. Um exemplo:

arquivo original

dn: cn=fremer, ou=people, dn=domain, dn=com
cn: fremer
givenName: Freddy
sn: Mercury

dn: cn=markno, ou=people, dn=domain, dn=com
cn: markno
givenName: Mark
sn: Knopfler

Saída:

dn: cn=fremer, ou=people, dn=domain, dn=com
mail: [email protected]

dn: cn=markno, ou=people, dn=domain, dn=com
mail: [email protected]

O dn é necessário, pois vou pegar o ldif resultante e passá-lo para "ldapadd" para atualização do LDAP. Alguma sugestão ou sugestão de onde devo olhar? Obrigada!

    
por spidernik84 22.08.2011 / 20:43

2 respostas

3

Você pode fazer isso com um script awk

#!/bin/awk -f
/^dn:/ {split($0,dname,", dn=");print $0 }
/^cn:/ { cn = $2 }
/^givenName:/ { gn = tolower($2) }
/sn:/ { sn = tolower($2) ; printf("mail: %s.%s@%s.%s\n\n",gn,sn,dname[2],dname[3] ) }

para usar, salve os itens acima em um arquivo, por exemplo awkscript e torná-lo executável, então

./awkscript datafile

Dada sua entrada, este script gera

dn: cn=fremer, ou=people, dn=domain, dn=com
mail: [email protected]

dn: cn=markno, ou=people, dn=domain, dn=com
mail: [email protected]
    
por 22.08.2011 / 22:34
2

Para materiais com várias linhas, eu sempre volto ao Perl ou qualquer outra coisa que me permita escrever estruturas de dados reais de forma semi-legível. Você pode realmente escrever código Perl legível; Eu nunca fui capaz de ler um comando awk depois que ele passou por uma dúzia de caracteres. Nem um pouco dizendo que isso não pode ser feito; Eu não sei como fazer isso.

O benefício adicional do Perl é que você pode encontrar (ou já possui) um módulo LDAP / LDIF para que você não precise analisá-lo por conta própria. A desvantagem potencial para Perl é ter que escolher um desses módulos. Genericamente, qualquer coisa com "Simples" no nome provavelmente será seu melhor ponto de partida.

    
por 22.08.2011 / 21:08

Tags