如何grep到S3中存储的文件

时间:2016-12-16 07:48:28

标签: amazon-s3 grep

有人知道如何使用aws S3直接进入存储桶的S3文件上执行grep吗? 例如,我有FILE1.csv,FILE2.csv有很多行,想要查找包含字符串JZZ的行

aws s3 ls --recursive s3://mybucket/loaded/*.csv.gz | grep ‘JZZ’

3 个答案:

答案 0 :(得分:10)

aws s3 cp命令可以将输出发送到stdout

aws s3 cp s3://mybucket/foo.csv - | grep 'JZZ'

短划线(-)表示将输出发送到stdout的命令。

请参阅:How to use AWS S3 CLI to dump files to stdout in BASH?

答案 1 :(得分:5)

您还可以使用GLUE / Athena组合,它允许您直接在AWS中执行。 根据数据量,查询的成本可能很高,需要时间。

基本上

  • 创建一个按行读取的GLUE分类器 enter image description here
  • 针对数据库(csvdumpdb)为您的S3数据目录创建一个爬虫 - 它将创建一个包含所有找到的csvs的所有行的表
  • 使用Athena进行查询,例如

    选择“$ path”,从'%some%fancy%string%'

  • 这一行开始行
  • 并获得类似

    的内容

    $ path line

    s3://mybucket/mydir/my.csv“我找到了一些,是的,”花哨,是的,字符串“

使您免于运行任何外部基础架构。

答案 2 :(得分:3)

您可以使用以下命令在本地进行操作:

aws s3 ls --recursive s3://<bucket_name>/<path>/ | awk '{print $4}' | xargs -I FNAME sh -c "echo FNAME; aws s3 cp s3://<bucket_name>/FNAME - | grep --color=always '<regex_pattern>'"

说明: ls命令生成一个文件列表,然后我们从输出中选择文件名,然后为每个文件(xargs命令)从S3下载文件并grep输出。

如果您必须从S3下载大量数据(由于传输成本),我不建议您使用此方法。虽然可以在连接了S3 VPC终结点的VPC上的某些EC2实例上运行命令,但是可以避免Internet传输的费用。