Чтобы объединить (в смысле SQL) таблицы, возвращаемые aws iam list-users
и итерации aws iam list-groups-for-user
, как данные, разделенные табуляцией, вы можете попробовать что-то вроде этого:
#!/usr/bin/env bash
aws iam list-users --output text > users.txt
cut -f6 users.txt | while read user ; do
(echo $user ; aws iam list-groups-for-user \
--user-name $user \
--output text) | paste - - >> groups.txt
done
join -1 6 -2 1 users.txt groups.txt
Примечания:
- Указание
--output text
заставляет все команды CLI AWS возвращать разделенные табуляцией данные. Таким образом, первая строка создает «таблицу» users.txt
из aws iam list-users
.
- Обратите внимание, что команда cut использует вкладку в качестве разделителя по умолчанию. Итак, мы читаем пользователя из 6-го поля и для каждого пользователя запускаем
aws iam list-groups-for-user
.
- Обратите внимание, что команда
paste - -
вставляет две предыдущие строки текста в одну и ту же строку. Цель этого состоит в том, чтобы добавить пользователя в поле в таблице groups.txt
, чтобы у нас было поле для «соединения».
-
join -1 6 -2 1 users.txt groups.txt
подобен соединению SQL в таблицах users.txt
и groups.txt
. -1 6
говорит, что использует 6-е поле из 1-го файла, а -2 1
говорит, что использует 1-е поле из второго файла в качестве поля для присоединения.
Если вы хотите удалить некоторые из этих полей в своем выводе, вы можете изменить команду соединения. Вы делаете это, указав список полей для включения через -o
. Э.Г.
join -o 1.6,1.3,1.4,1.5,2.6,2.3,2.4,2.5,2.7 -1 6 -2 1 users.txt groups.txt
Это говорит о том, что выберите 6-е, 3-е, 4-е, 5-е поля из первого файла и 6-е, 3-е, 4-е, 5-е и 7-е поля из второго файла.