Hi Monks, I have a script that GrandFather updated. I tried to add the uniq feature which will give only uniq lines. Here is the code-
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
But it's not printing uniq lines and skip if already exist above-

Output now-
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 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
Output looking for
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
Please let me know.

In reply to Uniq list by ArifS

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.