ArifS has asked for the wisdom of the Perl Monks concerning the following question:
But it's not printing uniq lines and skip if already exist above-use strict; use warnings; use 5.010; my @lists; my %group; my $lastGroup; while (defined(my $line = <DATA>)) { next if $line =~ /^access-list .*\bremark\b/; given ($line) { when (/^access-list/) { my @keys = $line =~ /([A-Z]+[-_][A-Z]+)/g; push @lists, {groups => \@keys, line => $line}; } when (/object-group\s+(\S+)\s+(\S+)/) { $group{$2}{line} = $line; $group{$2}{data} = []; $lastGroup = $2; } default { push @{$group{$lastGroup}{data}}, $line; push @{$group{$lastGroup}{groups}}, $1 if $line =~ /^\s+\S+\s+(\S+)$/; } } } # ------Uniq list--------------------- sub uniq { my %seen; grep !$seen{$_}++, @_; } my @lists1 = uniq(@lists); for my $list (@lists1) { print $list->{line}; printGroups($list->{groups}, %group); print "\n"; } # ------Uniq list--------------------- sub printGroups { my ($groups, %groupData) = @_; for my $group (sort @$groups) { next if !exists $groupData{$group}; print $groupData{$group}{line}; print @{$groupData{$group}{data}} if $groupData{$group}{data}; printGroups($groupData{$group}{groups}, %groupData) if exists $groupData{$group}{groups}; } } __DATA__ access-list INSIDE_IN remark DNS Client To DNS Server access-list INSIDE_IN extended permit tcp object-group DNS-CLIENT obje +ct-group DNS-SERVER object-group DNS_TCP access-list INSIDE_IN extended permit udp object-group DNS-CLIENT obje +ct-group DNS-SERVER object-group DNS_UDP object-group network PC1_1st network-object host 10.1.1.11 object-group network PC2_1st network-object host 10.1.1.12 object-group network DNS-CLIENT group-object PC1_1st group-object PC2_1st object-group network DNS-SERVER network-object host 10.1.1.5 object-group service DNS_TCP tcp port-object eq domain object-group service DNS_UDP udp port-object eq domain
Output looking foraccess-list INSIDE_IN extended permit tcp object-group DNS-CLIENT obje +ct-group DNS-SERVER object-group DNS_TCP object-group network DNS-CLIENT group-object PC1_1st group-object PC2_1st object-group network PC1_1st network-object host 10.1.1.11 object-group network PC2_1st network-object host 10.1.1.12 object-group network DNS-SERVER network-object host 10.1.1.5 object-group service DNS_TCP tcp port-object eq domain access-list INSIDE_IN extended permit udp object-group DNS-CLIENT obje +ct-group DNS-SERVER object-group DNS_UDP object-group network DNS-CLIENT group-object PC1_1st group-object PC2_1st object-group network PC1_1st network-object host 10.1.1.11 object-group network PC2_1st network-object host 10.1.1.12 object-group network DNS-SERVER network-object host 10.1.1.5 object-group service DNS_UDP udp port-object eq domain
Please let me know.access-list INSIDE_IN extended permit tcp object-group DNS-CLIENT obje +ct-group DNS-SERVER object-group DNS_TCP object-group network DNS-CLIENT group-object PC1_1st group-object PC2_1st object-group network PC1_1st network-object host 10.1.1.11 object-group network PC2_1st network-object host 10.1.1.12 object-group network DNS-SERVER network-object host 10.1.1.5 object-group service DNS_TCP tcp port-object eq domain access-list INSIDE_IN extended permit udp object-group DNS-CLIENT obje +ct-group DNS-SERVER object-group DNS_UDP object-group service DNS_UDP udp port-object eq domain
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Uniq list
by kennethk (Abbot) on Jul 12, 2016 at 14:11 UTC | |
|
Re: Uniq list
by Laurent_R (Canon) on Jul 12, 2016 at 14:01 UTC | |
|
Re: Uniq list
by Marshall (Canon) on Jul 12, 2016 at 14:23 UTC | |
by ArifS (Beadle) on Jul 12, 2016 at 14:29 UTC | |
|
Re: Uniq list
by morgon (Priest) on Jul 12, 2016 at 13:54 UTC |