【问题标题】:Grep sorted files in S3 folderGrep 对 S3 文件夹中的文件进行排序
【发布时间】:2019-03-26 12:41:10
【问题描述】:

我想对 S3 文件夹中的文件进行排序,然后检查文件是否包含某个字符串。

当我通常想要 grep 文件时,我会执行以下操作:

aws s3 cp s3://s3bucket/location/file.csv.gz - | zcat | grep 'string_to_find' 

我知道我可以像这样对文件进行排序:

aws s3api list-objects-v2 \
--bucket s3bucket \
--prefix location \
--query 'reverse(sort_by(Contents,&LastModified))'

到目前为止尝试过这样的事情,但管道坏了:

aws s3api list-objects-v2 \
--bucket s3bucket \
--prefix location \
--query 'reverse(sort_by(Contents,&LastModified))' | cp - | zcat | grep 'string_to_find'

【问题讨论】:

  • xargs 可能会有所帮助。
  • 感谢赛勒斯,这将如何运作?不熟悉终端中的 xargs。应该在cp里面吗?试过这个但没有用xargs -I % cp -
  • 旁注:您正在有效地下载每个文件,但会丢弃结果,因此如果您要进行重复搜索,最好使用aws s3 sync 将文件复制到本地并然后在本地搜索它们。

标签: grep aws-cli zcat


【解决方案1】:

您可以指定要输出的字段并强制它们变成纯文本:

aws s3api list-objects-v2 \
--bucket s3bucket \
--prefix location \
--query 'reverse(sort_by(Contents,&LastModified))[].[Key]' \
--output text

基本上,sort_byreverse 输出Contents 数组,这会提取Key 元素。我将[Key] 放在方括号中,以强制每个结果单独一行。

【讨论】:

    猜你喜欢
    • 2013-04-23
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 2021-03-30
    • 2019-03-11
    • 2023-04-11
    相关资源
    最近更新 更多