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