#!/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 Result
+s by Category (Including Nested),Total Hit Count
10.15.106.71,/Common/Awareness and Training/KnowBe4/2020- KnowBe4 Subs
+cription Renewal Docs/Axidome Quote My Corp 2020211 KnowBe4 2-yr Rene
+wal 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 Subs
+cription Renewal Docs/Axidome Quote My Corp 2020211 KnowBe4 2-yr Rene
+wal 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 Subs
+cription Renewal Docs/Axidome Quote My Corp 2020211 KnowBe4 2-yr Rene
+wal FINAL.pdf,FMRWX,Creator Owner,\Common,This folder only,Abstract\C
+reator Owner,IRS Data (1/1),PII (1),1
10.15.106.71,/Common/Awareness and Training/KnowBe4/2020- KnowBe4 Subs
+cription Renewal Docs/Axidome Quote My Corp 2020211 KnowBe4 2-yr Rene
+wal FINAL.pdf,FMRWX,FP NOW BMG FSE NTFS Admins,\Common,This folder on
+ly,Pathway12.My.Corp.com\FP NOW BMG FSE NTFS Admins,IRS Data (1/1),PI
+I (1),1
10.15.106.71,/Common/Awareness and Training/KnowBe4/2020- KnowBe4 Subs
+cription Renewal Docs/Axidome Quote My Corp 2020211 KnowBe4 2-yr Rene
+wal 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 Subs
+cription Renewal Docs/Axidome Quote My Corp 2020211 KnowBe4 2-yr Rene
+wal FINAL.pdf,FMRWX,SYSTEM,\Common,This folder only,Abstract\SYSTEM,I
+RS Data (1/1),PII (1),1
10.15.106.71,/Common/Awareness and Training/KnowBe4/2020- KnowBe4 Subs
+cription Renewal Docs/Axidome Quote My Corp 2020211 KnowBe4 2-yr Rene
+wal FINAL.pdf,FMRWX,MiJim,<not inherited>,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 Subs
+cription Renewal Docs/Axidome Quote My Corp 2020211 KnowBe4 2-yr Rene
+wal 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 Subs
+cription Renewal Docs/Axidome Quote My Corp 2020211 KnowBe4 2-yr Rene
+wal 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 Subs
+cription Renewal Docs/Axidome Quote My Corp 2020211 KnowBe4 2-yr Rene
+wal 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 Subs
+cription Renewal Docs/Axidome Quote My Corp 2020211 KnowBe4 2-yr Rene
+wal FINAL.pdf,RX,FOO BMG FS Support,\Common,This folder only,Pathway1
+2.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 Subs
+cription Renewal Docs/Axidome Quote My Corp 2020211 KnowBe4 2-yr Rene
+wal 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 Subs
+cription Renewal Docs/Axidome Quote My Corp 2020211 KnowBe4 2-yr Rene
+wal FINAL.pdf,RX,FP BMG IMG Read Access,\Common,This folder only,Path
+way12.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 Subs
+cription Renewal Docs/My-B8245.pdf,FMRWX,@FOO NOW Onsite Support,\Com
+mon,This folder only,Pathway12.My.Corp.com\@FOO NOW Onsite Support,IR
+S Data (1/1),PII (1),1
10.15.106.71,/Common/Awareness and Training/KnowBe4/2020- KnowBe4 Subs
+cription 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 Subs
+cription Renewal Docs/My-B8245.pdf,FMRWX,Creator Owner,\Common,This f
+older 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;
}
}
which outputs:
"File Server","Access Path","Current Permissions","Logon Name","Inheri
+ted From Folders",Flags,User/Group,"Classification Results","Classifi
+cation Results by Category (Including Nested)","Total Hit Count"
10.15.106.71,"/Common/Awareness and Training/KnowBe4/2020- KnowBe4 Sub
+scription Renewal Docs/Axidome Quote My Corp 2020211 KnowBe4 2-yr Ren
+ewal FINAL.pdf",FMRWX,"@FOO NOW Onsite Support,Administrators,Cluster
+SvcDIR,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 Sub
+scription Renewal Docs/Axidome Quote My Corp 2020211 KnowBe4 2-yr Ren
+ewal FINAL.pdf",MRWX,"@FP DIR BMG",\Common,"This folder only","Pathwa
+y12.My.Corp.com\@FP DIR BMG","IRS Data (1/1)","PII (1)",1
10.15.106.71,"/Common/Awareness and Training/KnowBe4/2020- KnowBe4 Sub
+scription Renewal Docs/Axidome Quote My Corp 2020211 KnowBe4 2-yr Ren
+ewal FINAL.pdf",RX,"&CDAdmin,@FOO DSMS Admins,DPeterso,FOO BMG FS Sup
+port,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 Sub
+scription Renewal Docs/My-B8245.pdf",FMRWX,"@FOO NOW Onsite Support,A
+dministrators,Creator Owner",\Common,"This folder only","Pathway12.My
+.Corp.com\@FOO NOW Onsite Support","IRS Data (1/1)","PII (1)",1
This looks like it correctly quotes unchanged fields that contain commas. If it doesn't for you, please post the failed lines and the code you ran to get the failed lines.
|