usando awk con paralelo

usando awk con paralelo

Tengo alrededor de 3000 archivos de 300 MB cada uno y me gustaría buscarlos para una serie de subcadenas lo más rápido posible con mi servidor de 16 núcleos.

Esto es lo que intenté pero no parece paralelizar la búsqueda de archivos.

sudo find /mnt2/preprocessed/preprocessed/mo* | sudo xargs awk '/substring/ {c++} END {print c}' | paste -sd+ | bc

Está pegado de diferentes procedimientos, no lo entiendo del todo. ¿Tiene alguna sugerencia sobre cómo puedo dividir el procesamiento de archivos?

Respuesta1

  1. Vea si tiene el parallelprograma en su sistema. (Puede provenir de GNU). Si es así, descubra cómo usarlo. De lo contrario,
  2. Ejecute su findsalida con un archivo. Utilizando un editor de texto, o posiblemente un script que utilice herramientas como head, divida ese archivo en 16 archivos fragmentados con (aproximadamente) el mismo número de líneas (es decir, haciendo referencia a un número igual de archivos encontrados). Luego inicie 16 awk … | paste … | bcoleoductos; uno para cada archivo de fragmento. (Y sume los 16 resultados).

Me pregunto por qué estás usando awkpara contar las apariciones de una cadena cuando grep -cestá diseñada específicamente para hacerlo.

Respuesta2

GNU paralelo es bastante compatible con xargs, en su caso puede reemplazarlo. Si solo cuenta las ocurrencias de substringuso grep -ccomoScottsugiere:

sudo find /mnt2/preprocessed/preprocessed/mo* | 
  sudo parallel grep -c source | paste -sd+ | bc

Tenga en cuenta que algunas versiones de GNU/Linux instalan GNU paralelo en modo compatible "Paralef de Tollef". Puede cambiar eso agregando --gnua la línea de comando argumentos en paralelo. Para que el cambio sea permanente, agregue --gnua ~/.parallel/config.

información relacionada