2011-08-08 29 views
9

He escrito un programa de procesamiento de archivos y ahora tiene que leer de un archivo comprimido (.gz archivo descomprimido puede conseguir tan grande como 2 TB),usando sed en un archivo comprimido

¿Existe un equivalente sed de cremallera archivos como (zcat/gato) o de lo contrario lo que sería el mejor enfoque para hacer la siguiente manera eficiente

ONE=`zcat filename.gz| sed -n $counts` 

$ conteos: contador de leer (línea por línea)

funciona el método anterior, pero es bastante lento para archivos grandes ya que necesito leer cada línea y realizar la coincidencia en ciertos campos.

Gracias

EDIT

Aunque no directamente útil, aquí hay un conjunto de zcommands

http://www.cyberciti.biz/tips/decompress-and-expand-text-files.html

+1

Trabajar en un archivo comprimido será lento de todos modos. – Nobody

+3

Mi opinión es que descomprimir un archivo y leer a través de un conducto ** es ** la forma más eficiente de abrir temporalmente un archivo zipilado y obtener un resultado. No tienes que perder tiempo reescribiendo el archivo cuando hayas terminado. Es más probable que pueda mejorar la eficiencia de su operación general asegurándose de que su código 'sed' esté completamente optimizado O, más probablemente, utilizando uno de awk, perl, python para hacer su cálculo. Buena suerte. – shellter

+0

gracias .. si no está comprimido, el tamaño del archivo cruzará 2TB ... por lo que no es factible para mi infraestructura ... – learner

Respuesta

3

Bueno, cualquiera de ellos puede tener más velocidad (es decir, utilizar archivos sin comprimir) o más libre espacio (es decir, use archivos comprimidos y la tubería que mostró) ... lo siento. Usar archivos comprimidos siempre tendrá una sobrecarga.

2

Si comprende la estructura interna del formato de compresión, es posible que pueda escribir un patrón de emparejamiento que pueda operar en datos comprimidos sin descomprimirlo completamente, sino simplemente determinando a partir de los datos comprimidos si el patrón estaría presente en una pieza dada de datos descomprimidos.

Si el patrón tiene alguna complejidad, esto suena como un proyecto bastante complicado ya que tendría que manejar casos donde el patrón podría ser satisfecho por la combinación de salida de dos (o más) piezas separadas de descompresión.

Cuestiones relacionadas