有人知道如何使用aws S3直接进入存储桶的S3文件上执行grep吗? 例如,我有FILE1.csv,FILE2.csv有很多行,想要查找包含字符串JZZ的行
aws s3 ls --recursive s3://mybucket/loaded/*.csv.gz | grep ‘JZZ’
答案 0 :(得分:10)
aws s3 cp
命令可以将输出发送到stdout
:
aws s3 cp s3://mybucket/foo.csv - | grep 'JZZ'
短划线(-
)表示将输出发送到stdout的命令。
答案 1 :(得分:5)
您还可以使用GLUE / Athena组合,它允许您直接在AWS中执行。 根据数据量,查询的成本可能很高,需要时间。
基本上
使用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传输的费用。