Linux/Unix Shell Scripting - Dessglosar email cut, sed, etc

 
Vista:
sin imagen de perfil

Dessglosar email cut, sed, etc

Publicado por Fer (21 intervenciones) el 30/10/2013 00:56:05
Hola, buenas,
Necesito hacer un desglosamiento y clasificacion de una lista de email para dejar al final todas sus partes delimitas por comas para cumplir con el standar csv.
Partiendo de una lista:
$ cat prueba.txt
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]

En lo que se refiere al desglose deberia finalizar asi:

[email protected],miemail.com,.com
[email protected],atasca.org,.org
[email protected],ejemplo.net,.net
[email protected],pcre.es,.es
[email protected],excluida.fr,.fr

La clasificacion estaria basada en el pais a tratar, para el ejemplo digamos que es España, y el resultado final deberia ser este:

[email protected],miemail.com,.com,G
[email protected],atasca.org,.org,G
[email protected],ejemplo.net,.net,G
[email protected],pcre.es,.es,T
[email protected],excluida.fr,.fr,X

Donde la leyenda de G,T,X seria esta:

G = Dominios globales; net, org, com, info, etc
T= Dominios Territoriales; es, fr, uk, de, etc
X= Dominios que quedan excluidos porque son de otro pais que el tratado, para el caso España (notese que .fr queda excluido)

Siempore traria un unico pais a la vez.
Tengo un txt con todos los dominios globales, otro con todos los territoriales y otro con el pais que se estaria tratando. Para el caso de España contendria .es, pero para otros paises como Uk tendria mas entradas, o Usa que tiene 3, a saber .us, .gov y .mil.
Despues por lo que he leido podria leer los patrones a usar de estos archivos y en consecuencia añadir la letra de clasificacion (G,T o X) al final de cada linea
Queria presentar primero la idea global del trabajo, pero cada cosa a su tiempo.

Con lo que estoy ahora es con el desglosamiento y despues de muchas pruebas solo he llegado a conseguir esto:

$ cut -f1 prueba.txt | sed 's/$/,/'
[email protected],
[email protected],
[email protected],
[email protected],
[email protected],

a partir de aqui me atasco. Este otro intento esta cerca pero no consigo concatenarlo con lo anterior:

$ cut -f1 prueba.txt | sed 's/$/,/' | awk -F"@" '{ print $2 }'
miemail.com,
latasca.org,
ejemplo.net,
pcre.es,
excluida.fr,

y ademas preferiria no usar awk, me resulta complicado.

Se que puedo crear los archivos separados tal cual los muestro arriba y despues unirlo todo con paste, pero preferiria una solucion "de una tirada" si fuera posible.
Ademas no sabria como extraer el tipo de dominio (.es.org, etc) con awk porque con la arroba es facil ya que hay solo una, pero puntos puede haber varios.

Muchas gracias por la atencion.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Dessglosar email cut, sed, etc

Publicado por Tom (361 intervenciones) el 30/10/2013 11:40:08
Para obtener la última parte del dominio:

1
while read LINE; do DOM=$(expr "$LINE" : '.*\(\.[^.]*\)'); echo $DOM; done < /tmp/prueba.txt
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Dessglosar email cut, sed, etc

Publicado por Fer (21 intervenciones) el 30/10/2013 12:41:49
Hola,
gracias por contestar.

Hasta la noche no podre probarlo. Entonces seria asi:
cut -f1 prueba.txt | sed 's/$/,/' | awk -F"@" '{ print $2 }' | while read LINE; do DOM=$(expr "$LINE" : '.*\(\.[^.]*\)'); echo $DOM; done < /tmp/prueba.txt

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Dessglosar email cut, sed, etc

Publicado por Fer (21 intervenciones) el 31/10/2013 23:32:01
Hola,
Tom, funciona perfecto a la hora de extraer los tipos de dominio. Al usar el metodo "paste" ni siquiera necesito añadir las comas como separadores de campo. El "problema" que tiene tu comando es que parece un poco lento comprado son sed y grep. Tarda 26 segundos en procesar 10000 emails.
He intentado adaptar tu RE : '.*\(\.[^.]*\)'); a estos comandos sin exito, xq imagino que iran mucho mas rapido pero hasta ahora no he tenido suerte.
Si alguien puedea adaptar la RE seria genial, seguramente se reduciria el tiempo de procesamiento, aqunque mañana seguire intentandolo, cuando este mas despejado.

Muchisimas gracias :-)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Dessglosar email cut, sed, etc

Publicado por Fer (21 intervenciones) el 01/11/2013 09:27:33
Hola, buenas,
Aqui pego lo que podido ir avanzando, por si a alguien le es util.
De momento he llegado a desglosar el email y pasarlo a otro archivo usando paste.
He pasado las lineas a procesa.sh:
$ cat procesa.sh
#! /bin/bash
sed -e 's|[^/]*@||' emails.txt > dominios.txt
grep -Eio '\.[^.]*$' emails.txt > tipodominio.txt
paste -d"," emails.txt dominios.txt tipodominio.txt > desglosados.txt
exit

$ cat emails.txt
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]

$ cat dominios.txt
miemail.com
latasca.org
ejemplo.net
pcre.es
excluida.fr

cat tipodominio.txt
.com
.org
.net
.es
.fr

cat desglosados.txt
[email protected],miemail.com,.com
[email protected],latasca.org,.org
[email protected],ejemplo.net,.net
[email protected],pcre.es,.es
[email protected],excluida.fr,.fr

Usando -d"," con paste no necesito añadir las comas. El tiempo de procesamiento es increiblemente rapido, no mas de 1segundo para 10000 lineas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar