передача команды из awk в следующую команду с помощью xargs - PullRequest
0 голосов
/ 04 марта 2020

Я использую AWS EC2 CLI для выполнения фильтра на остановленных экземплярах, а затем создаю из них AMI с именем AMI, взятым из тега экземпляра.

aws ec2 describe-instances --output text --profile proj --query 'Reservations[*].[Instances[*].[InstanceId, InstanceType, State.Name, Platform, Placement.AvailabilityZone, PublicIpAddress, PrivateIpAddress,[Tags[?Key==`Name`].Value][0][0]]]'  --filter --filters Name=instance-state-name,Values=stopped | awk '{print $1, $8}' | xargs -n2 aws ec2 create-image --profile proj --instance-id {} --name {} --no-reboot

как разрешить дифференцирование аргументов два различных параметра из AWK (instnaceid, тег имени экземпляра), таким образом, он может быть правильно введен в ec2 create-image для экземпляра instance-id и параметра --name соответственно

1 Ответ

0 голосов
/ 06 марта 2020

Вам не нужно awk. Используя AWS CLI, вы сначала извлекаете 8 значений, а затем используете awk для извлечения 2 значений из этих 8 значений. Почему? Просто извлеките 2 значения из AWS CLI без использования awk.

--query 'Reservations[*].[Instances[*].[InstanceId, [Tags[?Key==`Name`].Value][0][0]]]'

вернет только те значения, которые вас интересуют. Затем используйте xargs для передачи аргументов вашей следующей команде.

xargs -n2 command --arg1 $1 --arg2 $2

Вся ваша команда становится:

aws ec2 describe-instances --output text --profile proj --query 'Reservations[*].[Instances[*].[InstanceId, [Tags[?Key==`Name`].Value][0][0]]]'  --filter --filters Name=instance-state-name,Values=stopped | xargs -n2 aws ec2 create-image --profile proj --instance-id $1 --name $2 --no-reboot
...