[英]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 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.