es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Encuentra el contenido de un archivo de otro conjunto de archivos gz en UNIX

Tengo una lista de 500 IDs en el archivo search_these.txt; y 300 archivos de datos comprimidos en formato gzip numerados como {}_de_300_search_in.gz. Quiero extraer los datos correspondientes a los 500 IDs de cada uno de los 300 archivos de datos y guardarlos en un solo archivo de salida.

He intentado el siguiente código pero muestra un error “Usage: grep [OPTION]… PATTERN [FILE]…”. No estoy seguro de qué estoy haciendo mal aquí.

cat search_these.txt | while read line
do
    seq 1 300 | xargs -I '{}' bash -c 'zcat {}_de_300_search_in.gz | grep -w $line' >> output.txt
done
Tags:  ,

Answer

  1. Avatar for davy.ai

    El código anterior intenta extraer datos utilizando grep para cada identificación en el archivo search_these.txt de los 300 archivos de datos. El mensaje de error indica que la sintaxis para usar grep es incorrecta.

    Para solucionar el código, se debe actualizar la sintaxis de grep a lo siguiente:

    zcat {}_of_300_search_in.gz | grep -wFf - search_these.txt
    

    Esto extraerá todas las líneas del archivo comprimido que coincidan con cualquiera de los patrones en el archivo search_these.txt. El código actualizado debería verse así:

    cat search_these.txt | while read line
    do
        seq 1 300 | xargs -I '{}' bash -c "zcat {}_of_300_search_in.gz | grep -wFf - search_these.txt" >> output.txt
    done
    

    Ten en cuenta que se agrega la opción -F a grep para tratar los patrones en search_these.txt como cadenas fijas, y se utiliza la opción -f para especificar el archivo que contiene los patrones. El - se utiliza para leer los patrones desde la entrada estándar.

    Este código actualizado debería extraer datos para cada identificación en search_these.txt de los 300 archivos de datos en un único archivo de salida.

Comments are closed.