В поисках альтернативы AWK, чтобы ускорить эту команду - PullRequest
3 голосов
/ 07 ноября 2019

Я использовал AWK для этой команды, но она очень медленная.

Должен существовать более быстрый способ обработки этого списка из aws s3 ls command

s5cmd ls s3://bucket-name/* | awk -v AWS_BUCKET="bucket-name" '{cmd="aws s3api put-object-acl --access-control-policy file:///access_policy.json --bucket " AWS_BUCKET " --key "$5; system(cmd); print $5}'

. В основном в нем перечислены все объекты, а затем к ним применен ACL.

Любые идеи?

Ответы [ 2 ]

4 голосов
/ 08 ноября 2019

Ответ для меня был комбинацией двух ответов

s5cmd ls s3://bucket-name/* |
  awk -v AWS_BUCKET="bucket-name" '{
    printf "aws s3api put-object-acl --access-control-policy file:///access_policy.json --bucket %s --key %s\n", AWS_BUCKET, $5
  }' |
  parallel -j 32

Это значительно ускорило эту команду, спасибо, Гленн Джекман и Марк Сетчелл

3 голосов
/ 07 ноября 2019

Вместо того, чтобы делать system(cmd) для каждой строки, вы можете просто напечатать все команды, а затем перенаправить вывод в sh для их выполнения.

s5cmd ls s3://bucket-name/* |
  awk -v AWS_BUCKET="bucket-name" -v '{
    printf "aws s3api put-object-acl --access-control-policy file:///access_policy.json --bucket %s --key %s\n", AWS_BUCKET, $5
  }' |
  sh

И у вас есть этот случайный случай -v там. Я предполагаю, что это опечатка, или вы удалили что-то чувствительное.

...