簡體   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