繁体   English   中英

如何 grep 到存储在 S3 中的文件

[英]How to grep into files stored in S3

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

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

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

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

破折号( - )表示命令将输出发送到stdout。

请参阅: 如何使用AWS S3 CLI将文件转储到BASH中的stdout?

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

基本上

  • 创建一个按行读取的GLUE分类器 在此处输入图片说明
  • 针对数据库(csvdumpdb)为您的S3数据目录创建搜寻器-它将创建一个表,其中包含找到的所有csv的所有行
  • 使用雅典娜查询,例如

    选择“ $ path”,从“%some%fancy%string%”等行开始

  • 并得到像

    $路径行

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

使您不必运行任何外部基础结构。

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

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传输的成本。

有一种方法可以通过 aws 命令行来完成,但需要一些工具和花哨的管道。 这里有些例子

S3:

aws s3api list-objects --bucket my-logging-bucket --prefix "s3/my-events-2022-01-01" | jq -r '.内容[]| .键' | 排序-r | xargs -I{} aws s3 cp s3://my-logging-bucket/{} -

云端:

aws s3api list-objects --bucket my-logging-bucket --prefix "cloudfront/blog.example.com/EEQEEEEEEEEE.2022-01-01" |jq -r '.Contents[]| .键' | 排序-r | xargs -I{} aws s3 cp s3://my-logging-bucket/{} - | zgrep 获取

“sort -r”只是颠倒顺序,因此它首先显示最新的对象。 如果您想按时间顺序查看它们,可以省略它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM