Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

451
Visualizações
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!

about 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

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.
about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda