Поиск внутри корзины s3 с журналами

Я предполагаю, что из вашей (закомментированной) команды sed вы хотите, чтобы соответствовал и заменял регулярное выражение: [1-9] [0-9]? , что означает

  • ненулевую цифру ( [1-9] ), за которой следует
  • ноль или одна цифра (и) ( [0-9]? )

, которое является довольно распространенным регулярным выражением для целых чисел от 1 до 99 (без нуля в начале). Однако $ { параметр / шаблон / строка } не использует регулярные выражения, он использует шаблоны расширения имени пути (также известные как подстановочные знаки). Итак, [1-9] [0-9]? означает

  • ненулевую цифру ( [1-9] ), за которой следует
  • цифра ( [0-9] ), за которой следует
  • любой символ (? )

Тем не менее, это должно было работать для двузначных имен файлов, { {1}}, хотя он потребляет . и переименуйте 10.jpg в 46jpg (без . ).


Что касается другой части вашего вопроса, // заменяет все вхождения шаблона , while / заменяет только первый. Например,

$ i=cataract
$ echo "${i/a/X}"
cXtaract
$ echo "${i//a/X}"
cXtXrXct
5
27.09.2016, 12:06
2 ответа

Я считаю, что самый быстрый способ - сначала скопировать их локально, а затем выполнить локальный zgrep:

aws s3 cp s3: // bucket / contains / the / журналы. --recursive

Это скопирует ( cp ) все журналы в ваш текущий каталог (. ), а также включит все подпапки ( - recursive ).

Затем локальный zgrep :

zgrep «поисковые слова» * .gz

Или также для рекурсивного поиска подкаталогов:

find -name \ *. Gz -print0 | xargs -0 zgrep "STRING"

(Взято с unix.stackexchange.com .)

7
27.01.2020, 20:34

У меня была такая же проблема. Я попытался написать скрипт на Python, чтобы загрузить файл и запустить его через zgrep. Но только на запуск одной команды grep ушло 30 секунд. Файлы также были около 200 МБ, поэтому общее время было очень большим. И мне пришлось сделать это для сотен файлов.

В моем случае я написал лямбда-функцию и запускал ее параллельно для разных файлов.gz. Используйте хранилище /tmp для загрузки файла.gz для экземпляра лямбда и запустите zgrep.

os.chdir('/tmp/') os.mkdir('s3_logs') os.chdir('s3_logs') s3.download_file(Bucket, s3object, '/tmp/s3_logs/file.gz') query = 'zgrep String file.gz' result = os.popen(query).read() print(result)

Несколько экземпляров лямбда могут сделать его как минимум в несколько раз быстрее. Хотя помните, что хранилище tmp для лямбды имеет всего 500 МБ.

1
27.01.2020, 20:34

Теги

Похожие вопросы