use strict; use warnings; use feature 'say'; use List::Util 'max'; my %count; local $/ = "arn:aws:iam::"; while (my $line = ) { chomp $line; $line =~ s!$/!! if $. == 1; next if $line eq ''; my ($key, @values) = split(/\n/, $line); $count{$key} = scalar @values; } my @keys = keys %count; my $longest = max map { length } @keys; for my $key (sort @keys) { say sprintf("%-${longest}s : %3d", $key, $count{$key}); } __DATA__ arn:aws:iam::11111111111:role/ADFS-MyRoleName "Alexa for Business" "AWS Certificate Manager" "AWS Certificate Manager Private Certificate Authority" "AWS Amplify" "Manage - Amazon API Gateway" "AWS App Mesh" "Amazon AppStream 2.0" "AWS AppSync" "Amazon Athena" "AWS Auto Scaling" arn:aws:iam::12345678901:role/Role2-Role2 "Alexa for Business" "AWS Certificate Manager" "AWS Certificate Manager Private Certificate Authority" "AWS Amplify" "Manage - Amazon API Gateway" "Application Auto Scaling" "AWS App Mesh" "Amazon AppStream 2.0" "AWS AppSync"