Generar CSV a partir del archivo de zona NS


1

Tengo un archivo grande que contiene registros en varias líneas. ex:

domain1 NS ns1
domain1 NS ns2
domain1 NS ns3
domain2 NS dnsx

¿Cuál podría ser la forma más rápida de generar un CSV del formulario?

domain1,ns1,ns2,ns3
domain2, dnsx

Probé scripts php y groovy, pero el tiempo de carga del procesador es demasiado alto para un archivo (leído) de un archivo de 1 Gb (y la consiguiente escritura en un archivo csv).

Estoy pensando que debería haber un mejor enfoque programático que lo que estoy haciendo. Básicamente, estoy creando una lista / matriz para contener registros y verificar el último elemento si se encuentra el mismo dominio en la línea actual que se está verificando.

PD: mencionó groovy / php, pero la respuesta puede no tener relación con estos lenguajes de script específicos.


¿El archivo ya está ordenado por dominio? O al menos, ¿están todos los registros con el mismo dominio agrupados?
Glenn Jackman

Están ordenados
Armand

Respuestas:


1

Suponiendo que todos los registros con el mismo dominio estén agrupados, este programa awk tendrá una huella de memoria muy pequeña (no puedo decir cuál será la carga de la CPU)

awk '
    $1 != domain {
        if (domain) print ""
        printf "%s", $1
        domain = $1
    } 
    {printf ",%s", $3} 
    END {print ""}
' file

Aunque la carga de la CPU llega a 100, ¡esto es mucho más efectivo que lo que tenía! Muchas gracias. Neet para modificar el script para leer los argumentos del archivo y es perfecto! PD Parece que el% s no es necesario en la línea 7.
Armand

Siempre uso una cadena de formato con printf. ¿Qué pasa si la cadena $ 1 en sí contiene un% s?
glenn jackman

Es solo que termina en un error fatal: (FILENAME = net.zone2 FNR = 1) fatal: no hay suficientes argumentos para satisfacer la cadena de formato `,% sNS1 '. ^ se quedó sin este
Armand

1
Oh! Olvidé la coma después de la cadena de formato.
Glenn Jackman
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.