#!/usr/bin/perl use strict; # https://perlmonks.org/?node_id=11159049 use warnings; use Text::CSV qw( csv ); my $data = <<''; File Server,Access Path,Current Permissions,Logon Name,Inherited From Folders,Flags,User/Group,Classification Results,Classification Results by Category (Including Nested),Total Hit Count 10.15.106.71,/Common/Awareness and Training/KnowBe4/2020- KnowBe4 Subscription Renewal Docs/Axidome Quote My Corp 2020211 KnowBe4 2-yr Renewal FINAL.pdf,FMRWX,@FOO NOW Onsite Support,\Common,This folder only,Pathway12.My.Corp.com\@FOO NOW Onsite Support,IRS Data (1/1),PII (1),1 10.15.106.71,/Common/Awareness and Training/KnowBe4/2020- KnowBe4 Subscription Renewal Docs/Axidome Quote My Corp 2020211 KnowBe4 2-yr Renewal FINAL.pdf,FMRWX,Administrators,\Common,This folder only,10.15.106.71\Administrators,IRS Data (1/1),PII (1),1 10.15.106.71,/Common/Awareness and Training/KnowBe4/2020- KnowBe4 Subscription Renewal Docs/Axidome Quote My Corp 2020211 KnowBe4 2-yr Renewal FINAL.pdf,FMRWX,Creator Owner,\Common,This folder only,Abstract\Creator Owner,IRS Data (1/1),PII (1),1 10.15.106.71,/Common/Awareness and Training/KnowBe4/2020- KnowBe4 Subscription Renewal Docs/Axidome Quote My Corp 2020211 KnowBe4 2-yr Renewal FINAL.pdf,FMRWX,FP NOW BMG FSE NTFS Admins,\Common,This folder only,Pathway12.My.Corp.com\FP NOW BMG FSE NTFS Admins,IRS Data (1/1),PII (1),1 10.15.106.71,/Common/Awareness and Training/KnowBe4/2020- KnowBe4 Subscription Renewal Docs/Axidome Quote My Corp 2020211 KnowBe4 2-yr Renewal FINAL.pdf,FMRWX,ClusterSvcDIR,\Common,This folder only,Pathway12.My.Corp.com\ClusterSvcDIR,IRS Data (1/1),PII (1),1 10.15.106.71,/Common/Awareness and Training/KnowBe4/2020- KnowBe4 Subscription Renewal Docs/Axidome Quote My Corp 2020211 KnowBe4 2-yr Renewal FINAL.pdf,FMRWX,SYSTEM,\Common,This folder only,Abstract\SYSTEM,IRS Data (1/1),PII (1),1 10.15.106.71,/Common/Awareness and Training/KnowBe4/2020- KnowBe4 Subscription Renewal Docs/Axidome Quote My Corp 2020211 KnowBe4 2-yr Renewal FINAL.pdf,FMRWX,MiJim,,This folder only,"Pathway12.My.Corp.com\Michaels, Jim@My",IRS Data (1/1),PII (1),1 10.15.106.71,/Common/Awareness and Training/KnowBe4/2020- KnowBe4 Subscription Renewal Docs/Axidome Quote My Corp 2020211 KnowBe4 2-yr Renewal FINAL.pdf,MRWX,@FP DIR BMG,\Common,This folder only,Pathway12.My.Corp.com\@FP DIR BMG,IRS Data (1/1),PII (1),1 10.15.106.71,/Common/Awareness and Training/KnowBe4/2020- KnowBe4 Subscription Renewal Docs/Axidome Quote My Corp 2020211 KnowBe4 2-yr Renewal FINAL.pdf,RX,&CDAdmin,\Common,This folder only,Pathway12.My.Corp.com\&CDAdmin,IRS Data (1/1),PII (1),1 10.15.106.71,/Common/Awareness and Training/KnowBe4/2020- KnowBe4 Subscription Renewal Docs/Axidome Quote My Corp 2020211 KnowBe4 2-yr Renewal FINAL.pdf,RX,@FOO DSMS Admins,\Common,This folder only,Pathway12.My.Corp.com\@FOO DSMS Admins,IRS Data (1/1),PII (1),1 10.15.106.71,/Common/Awareness and Training/KnowBe4/2020- KnowBe4 Subscription Renewal Docs/Axidome Quote My Corp 2020211 KnowBe4 2-yr Renewal FINAL.pdf,RX,FOO BMG FS Support,\Common,This folder only,Pathway12.My.Corp.com\FOO BMG FS Support,IRS Data (1/1),PII (1),1 10.15.106.71,/Common/Awareness and Training/KnowBe4/2020- KnowBe4 Subscription Renewal Docs/Axidome Quote My Corp 2020211 KnowBe4 2-yr Renewal FINAL.pdf,RX,DPeterso,\Common,This folder only,"Pathway12.My.Corp.com\Peterson, Dan@My",IRS Data (1/1),PII (1),1 10.15.106.71,/Common/Awareness and Training/KnowBe4/2020- KnowBe4 Subscription Renewal Docs/Axidome Quote My Corp 2020211 KnowBe4 2-yr Renewal FINAL.pdf,RX,FP BMG IMG Read Access,\Common,This folder only,Pathway12.My.Corp.com\FP BMG IMG Read Access,IRS Data (1/1),PII (1),1 10.15.106.71,/Common/Awareness and Training/KnowBe4/2020- KnowBe4 Subscription Renewal Docs/My-B8245.pdf,FMRWX,@FOO NOW Onsite Support,\Common,This folder only,Pathway12.My.Corp.com\@FOO NOW Onsite Support,IRS Data (1/1),PII (1),1 10.15.106.71,/Common/Awareness and Training/KnowBe4/2020- KnowBe4 Subscription Renewal Docs/My-B8245.pdf,FMRWX,Administrators,\Common,This folder only,10.15.106.71\Administrators,IRS Data (1/1),PII (1),1 10.15.106.71,/Common/Awareness and Training/KnowBe4/2020- KnowBe4 Subscription Renewal Docs/My-B8245.pdf,FMRWX,Creator Owner,\Common,This folder only,Abstract\Creator Owner,IRS Data (1/1),PII (1),1 my %database; my $aoa = csv( in => \$data ); # FIXME change to filename my @output = shift @$aoa; # the header for my $fields ( @$aoa ) { my $ref = \%database; $ref = $ref->{$_} //= {} for @$fields; } combine( \%database ); # combine lines with common beginning csv( in => \@output, out => *STDOUT ); # FIXME change to filename sub tail { my $ref = shift; my ($key) = sort keys %$ref; $key ? ( $key, tail( $ref->{$key} ) ) : (); } sub combine { my ($ref, @lines) = @_; my @keys = sort keys %$ref; if( @keys > 1 and @lines >= 3 ) { my $group = join ',', @keys; push @output, [ @lines, $group, tail $ref->{$keys[0]} ]; } else { combine( $ref->{$_}, @lines, $_ ) for @keys; @keys or push @output, \@lines; } } #### "File Server","Access Path","Current Permissions","Logon Name","Inherited From Folders",Flags,User/Group,"Classification Results","Classification Results by Category (Including Nested)","Total Hit Count" 10.15.106.71,"/Common/Awareness and Training/KnowBe4/2020- KnowBe4 Subscription Renewal Docs/Axidome Quote My Corp 2020211 KnowBe4 2-yr Renewal FINAL.pdf",FMRWX,"@FOO NOW Onsite Support,Administrators,ClusterSvcDIR,Creator Owner,FP NOW BMG FSE NTFS Admins,MiJim,SYSTEM",\Common,"This folder only","Pathway12.My.Corp.com\@FOO NOW Onsite Support","IRS Data (1/1)","PII (1)",1 10.15.106.71,"/Common/Awareness and Training/KnowBe4/2020- KnowBe4 Subscription Renewal Docs/Axidome Quote My Corp 2020211 KnowBe4 2-yr Renewal FINAL.pdf",MRWX,"@FP DIR BMG",\Common,"This folder only","Pathway12.My.Corp.com\@FP DIR BMG","IRS Data (1/1)","PII (1)",1 10.15.106.71,"/Common/Awareness and Training/KnowBe4/2020- KnowBe4 Subscription Renewal Docs/Axidome Quote My Corp 2020211 KnowBe4 2-yr Renewal FINAL.pdf",RX,"&CDAdmin,@FOO DSMS Admins,DPeterso,FOO BMG FS Support,FP BMG IMG Read Access",\Common,"This folder only",Pathway12.My.Corp.com\&CDAdmin,"IRS Data (1/1)","PII (1)",1 10.15.106.71,"/Common/Awareness and Training/KnowBe4/2020- KnowBe4 Subscription Renewal Docs/My-B8245.pdf",FMRWX,"@FOO NOW Onsite Support,Administrators,Creator Owner",\Common,"This folder only","Pathway12.My.Corp.com\@FOO NOW Onsite Support","IRS Data (1/1)","PII (1)",1