I have this command which displays all the record from the search. But I would like to filter only the record that matches the search word.
For e.g.
for user in $(aws iam list-users |grep -i UserName|sed -e 's/.*: "//' -e 's/",//'); do
echo USER: $user;
echo TAGS:
aws iam list-user-tags --user-name $user --output text | awk '{print $2,$3}'
echo GROUPS:
aws iam list-groups-for-user --user-name $user --output text|awk {'print $5'}; done > users.txt
The above command displays the following results.
User: [email protected]
TAGS:
Team red
Status active
Environment: nonprod
GROUPS:
iam-nonprod
iam-prod
User: [email protected]
TAGS:
Team green
Status active
Environment: nonprod
GROUPS:
iam-nonprod
iam-prod
etc.
I would like get all the user where tag Team == red.
I tried with search string in line 4 like,
aws iam list-user-tags --user-name $user --output text | awk '/red/{print $2,$3}'
but it displays only one line
Team red
But I would like to display full record like
User: [email protected]
TAGS:
Team red
Status active
Environment: nonprod
GROUPS:
iam-nonprod
iam-prod
Could you please help how I can display all the record where tag Team == red.
3
Answers
For awk, you can use the paragraph mode. This will display all "records" that contain
Team red
.You can solve this with various awscli commands and the use of the
--query
option which allows you to perform conditional client-side filtering.Here is an example:
Sample output:
It’s super easy with AWK. First put your data in a file and this command will do whole job: