Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

458
Vistas
Cómo grep un término de S3 y el nombre del objeto de salida

Necesito agrupar un término en miles de archivos en S3 y enumerar esos nombres de archivo en algún archivo de salida. Soy bastante nuevo en el uso de cli, por lo que he estado probando tanto en mi local como en un pequeño subconjunto en s3.

Hasta ahora tengo esto:

 aws s3 cp s3://mybucket/path/to/file.csv - | grep -iln searchterm > output.txt

El problema con esto es con el guión. Como estoy copiando a la salida estándar, el interruptor -l en grep regresa (entrada estándar) en lugar de file.csv

Mi resultado deseado es

 file.csv

Eventualmente, tendré que iterar esto en todo el depósito, y luego en todos los depósitos, para obtener

 file1.csv file2.csv file3.csv

Pero primero tengo que superar este obstáculo. ¡Gracias!

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Debido a que imprime el archivo en STDOUT y lo canaliza a grep STDIN, grep no tiene idea de que el archivo original era file.csv . Si tienes una larga lista de archivos, yo haría:

 while read -r file; do aws s3 cp s3://mybucket/path/to/${file} - | grep -q searchterm && { echo ${file} >> output.txt; }; done < files_list.txt

No puedo probarlo, porque no tengo acceso a una instancia de AWS S3, pero el truco es usar grep silenciosamente ( -q ), devolverá verdadero si encuentra al menos una coincidencia, falso de lo contrario; Luego puede imprimir el nombre del archivo.

EDITAR: Explicación

  1. El ciclo while iterará sobre cada línea de files_list.txt
  2. El comando aws imprimirá este archivo en stdout
  3. Redirigimos stdout a grep en modo silencioso ( -q ), que actúa como un comparador de patrones, devolviendo verdadero si se encuentra una coincidencia, falso en caso contrario.
  4. Si grep devuelve verdadero, agregamos el nombre del archivo ( ${file} ) a nuestro archivo de salida.

EDIT2: Otra solución

 while read -r file; do aws s3 cp s3://mybucket/path/to/${file} - | sed -n /searchpattern/{F;q} >> output.txt; done < files_list.txt

Explicación

Los pasos 1 y 2 son iguales, entonces:

  1. stdout se redirige a sed, que buscará en el archivo línea por línea hasta que encuentre el primer stream pattern , y luego saldrá ( q ), imprimiendo el nombre del archivo ( F ) en el archivo de salida.
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda