0

Here is sample of input file. There are 80k plus lines. I want only one pass thru file to avoid lengthy run. Is there way pass thru many times thru entire file and complete within 30 minutes ? Thank you

bpdppa301p.corpads.local 86929680 JC_UNIX_FS01_INCR JC_FS UNIX_FS01_INCR incr 02/24/2022 03/30/2022 03/30/2022  disk 1645678800 Clone_DR 84 MB /dbwsrp01/dbwsrp01         MNBDD3302P.corpads.local
rspedw03.corpads.local 40339268 JC_UNIX_FS01_INCR_DD2 JC_FS_DD2 UNIX_FS01_INCR_DD2 incr 02/24/2022 03/30/2022 03/30/2022  disk 1645678800 Clone_DR 39 MB /dbinstp1/edwp01/08/tmp05 MNBDD5304P.CORPADS.LOCAL
rspedw01.corpads.local 4 JC_UNIX_FS01_INCR_DD2 JC_FS_DD2 UNIX_FS01_INCR_DD2 incr 02/24/2022 03/30/2022 03/30/2022  disk 1645678800 Clone_DR 4  B /db2core                 MNBDD5304P.CORPADS.LOCAL
bpdppa301p.corpads.local 86929680 JC_UNIX_FS01_INCR JC_FS UNIX_FS01_INCR incr 02/24/2022 03/30/2022 03/30/2022  disk 1645678800 backup 84 MB /dbwsrp01/dbwsrp01           JCBDD1300P.corpads.local
rspedw03.corpads.local 40339268 JC_UNIX_FS01_INCR_DD2 JC_FS_DD2 UNIX_FS01_INCR_DD2 incr 02/24/2022 03/30/2022 03/30/2022  disk 1645678800 backup 39 MB /dbinstp1/edwp01/08/tmp05 JCBDD2301P.CORPADS.LOCAL
bpdppa301p.corpads.local 84197340 JC_UNIX_FS01_INCR JC_FS UNIX_FS01_INCR incr 02/24/2022 03/30/2022 03/30/2022  disk 1645678805 Clone_DR 82 MB /dbwsrp01/log              MNBDD3302P.corpads.local
rspedw02.corpads.local 87501964 JC_UNIX_FS01_INCR_DD2 JC_FS_DD2 UNIX_FS01_INCR_DD2 incr 02/24/2022 03/30/2022 03/30/2022  disk 1645678805 Clone_DR 85 MB /dbinstp1/edwp01/01/tmp04 MNBDD5304P.CORPADS.LOCAL
rspedw03.corpads.local 38487864 JC_UNIX_FS01_INCR_DD2 JC_FS_DD2 UNIX_FS01_INCR_DD2 incr 02/24/2022 03/30/2022 03/30/2022  disk 1645678805 Clone_DR 37 MB /dbinstp1/edwp01/08/tmp06 MNBDD5304P.CORPADS.LOCAL
rspedw01.corpads.local 4 JC_UNIX_FS01_INCR_DD2 JC_FS_DD2 UNIX_FS01_INCR_DD2 incr 02/24/2022 03/30/2022 03/30/2022  disk 1645678805 Clone_DR 4  B /sortarea/saswork        MNBDD5304P.CORPADS.LOCAL

bpdppa301p.corpads.local 84197340 JC_UNIX_FS01_INCR JC_FS UNIX_FS01_INCR incr 02/24/2022 03/30/2022 03/30/2022 disk 1645678805 backup 82 MB /dbwsrp01/log JCBDD1300P.corpads.local

code

    #########################################manuplation of MMINFO ###############
    ######mminfo -avot -q "savetime >= '24 February 2022', savetime <= '24 March 2022'" -r client,totalsize,group,policy,workflow,level,sscreate,ssretent,clretent,device,family,nsavetime,action,sumsize,name,location
    ################################################################################3
    $out=Get-Content C:\anil\networker\mminfo_0324_2022.txt
    $ht = @{}
    $arr = @()
    $today = Get-Date
    $outFile = $(Join-Path -Path $PSScriptRoot -ChildPath "Networker_fetb_$(get-date -UFormat '%Y-%m-%d-%H-%M-%S').csv")
    "Server Nam:Overall Size in MB:DB2 Size in MB:RMAN Size in MB:File Size in MB:Groups Name:Backup Type" | Out-File -FilePath $outFile
    foreach ( $line in $out){
                  $arr=$line.Split(" ")
                  if ( $arr[0] -ne "nwsppl300p.corpads.local"){
                  $mn=$line -csplit "incr|full|manual" ### split on case sensitive on incr or full or manual
                  $md=$mn[1] -split "\s{1,}"   ### split on more than one white space
                  if ($line -match  '.*( backup |Clone_DR ).*') {$btype=$md[9]} else {$btype=$md[8]}
                  $clientHostName,$null,$backupPlans = -split $mn[0] ### split mn[0] in three peice
                  if ($line -cmatch  "incr" -and $line -cmatch  "DB2") {$bt="DB2incr"}
                  if ($line -cmatch  "manual" -and $line -cmatch  "DB2") {$bt="DB2manual"}
                  if ($line -cmatch  "full" -and $line -cmatch  "DB2") {$bt="DB2full"} 
                  if ($line -cmatch  "incr" -and $line -cmatch  "RMAN") {$bt="RMANincr"}
                  if ($line -cmatch  "manual" -and $line -cmatch  "RMAN") {$bt="RMANmanual"}
                  if ($line -cmatch  "full" -and $line -cmatch  "RMAN") {$bt="RMANfull"} 
                  if ($line -cmatch  "incr" -and $line -notmatch  "DB2" -and $line -notmatch  "RMAN") {$bt="Fileincr"}
                  if ($line -cmatch  "manual" -and $line -notmatch  "DB2" -and $line -notmatch  "RMAN") {$bt="Filemanual"}
                  if ($line -cmatch  "full" -and $line -notmatch  "DB2" -and $line -notmatch  "RMAN") {$bt="Filefull"} 
                  $date =$mn[1].split(" ")[2]  #### get retention ########
                  $bdate =$mn[1].split(" ")[1]  #### get backup date ########
                  
                  $date1str="02/23/2022"   #### start date
                  $date2str="03/05/2022"   #### end date
                  $date1=[Datetime]::ParseExact($date1str, 'MM/dd/yyyy', $null)   ### convert string to date format
                  $date2=[Datetime]::ParseExact($date2str, 'MM/dd/yyyy', $null)   ### convert string to date format
                  $newdate=[Datetime]::ParseExact($date, 'MM/dd/yyyy', $null)     ### convert string to date format
                  $diff = New-TimeSpan -Start $today -end $newdate
                  
                  if ( $diff.Days -lt 400 -and ($bdate -ge $date1) -and ($bdate -le $date2) ) {      #### look for one year only and between date1 and date2 ########
                       if ( $arr[12] -ne "Clone_DR") {
                            if ($arr[0] -notin $ht.keys){
                                                     $ht[$arr[0]] = @{}
                                                                                                      
                                                     if ($btype -match "DB2") {  
                                                     $ht[$arr[0]]['Db2size'] = [int64]$arr[1]   ### convert string to integer format
                                                     $ht[$arr[0]]['groups'] = @($backupPlans)  ### adding to array
                                                     $ht[$arr[0]]['type'] = @($bt)              ### adding to array
                                                      }
                                                     if ($btype -match "RMAN") { 
                                                     $ht[$arr[0]]['RMANsize'] =[int64] $arr[1]
                                                     $ht[$arr[0]]['groups'] = @($backupPlans)
                                                     $ht[$arr[0]]['type'] = @($bt)
                                                     } 
                                                     if  ($btype -notmatch "RMAN" -and $btype -notmatch "DB2" ){
                                                     $ht[$arr[0]]['Filesize'] =[int64] $arr[1]
                                                     $ht[$arr[0]]['groups'] = @($backupPlans)
                                                     $ht[$arr[0]]['type'] = @($bt)
                                                     }
                                                     
                                                     } else {
                                                             
                                                    if ($btype -match "DB2" -and $arr[1] -gt $ht[$arr[0]]['Db2size'] ) {
                                                    $ht[$arr[0]]['Db2size'] += [int64]$arr[1]
                                                    if ($ht[$arr[0]]['groups'] -notcontains $backupplans) { 
                                                    $ht[$arr[0]]['groups'] += $backupPlans
                                                    $ht[$arr[0]]['type'] += $bt
                                                    }
                                                    }                                                                      
                                                    if ($btype -match "RMAN" -and $arr[1] -gt $ht[$arr[0]]['RMANsize']) {
                                                    
                                                    $ht[$arr[0]]['RMANsize'] += [int64]$arr[1]
                                                    if ($ht[$arr[0]]['groups'] -notcontains $backupplans ) { 
                                                    $ht[$arr[0]]['groups'] += $backupPlans
                                                    $ht[$arr[0]]['type'] += $bt
                                                    }
                                                      } 
                                                    if  ($btype -notmatch "RMAN" -and $btype -notmatch "DB2" -and $arr[1] -gt $ht[$arr[0]]['Filesize']){ 
                                                     $ht[$arr[0]]['Filesize'] += [int64]$arr[1]
                                                     if ($ht[$arr[0]]['groups'] -notcontains $backupplans) { 
                                                     $ht[$arr[0]]['groups'] += $backupPlans
                                                     $ht[$arr[0]]['type'] += $bt
                                                     }
                                                     }
    
                                                        }
                                                        }  ###clone_dr
                                                        }   ###less than 400
                              } ### chcking for networker server
                              } #### looping thru file
    write-host "=================================In MB =============================================================================================================================="
    write-host "===ServerName==============OverAllsize======DB2size===========RMANsize========FileSize========Groups=============================================BackupType=========="
    write-host "====================================================================================================================================================================="
    
     $ht.GetEnumerator()| ForEach-Object  {
     $total = $_.value.Db2size/1024/1024 + $_.value.RMANsize/1024/1024 + $_.value.Filesize/1024/1024
     "{0}:{1}:{2}:{3}:{4}:{5}:{6}" -f $_.name,$total,$($_.value.Db2size/1024/1024),$($_.value.RMANsize/1024/1024),$($_.value.Filesize/1024/1024),$(($_.Value.groups |Sort-Object -Unique) -join ','),$(($_.Value.type |Sort-Object -Unique) -join ',') | out-file -FilePath $outfile -Append
     "{0,-25}     {1:n2}          {2:n2}            {3:n2}            {4:n2}          {5,-35}   {6,-15}" -f $_.name,$total,$($_.value.Db2size/1024/1024),$($_.value.RMANsize/1024/1024),$($_.value.Filesize/1024/1024),$(($_.Value.groups |Sort-Object -Unique) -join ','),$(($_.Value.type |Sort-Object -Unique) -join ',')

}    
  • 2
    Instead of `Get-Content` with individual `-cmatch` statements, use a `switch -Regex -CaseSensitive -File` statement, which performs much better - see the linked duplicate for an example. – mklement0 Mar 31 '22 at 13:47
  • 1
    Your best bet for speeding it up is _separating ingestion, transformation and analysis_ - do a single run over the file (use `switch -file` for this) where you parse (or discard) each line and produce an object with all the relevant properties extracted from that line. Once you've collected all the information you need and no longer need to read the file, you can start transforming the data (indexing by type/client/plan in hashtables, grouping based on client, etc.). Finally once all that's done and ready, you do your analysis/calculations and produce the required output. – Mathias R. Jessen Mar 31 '22 at 13:48
  • what code be to get all data in every line in Hashtable ( array ) or any other method? then i can use hashtable to get desired output ? – postmaster 420 Mar 31 '22 at 16:05
  • what code be to get all data in every line in Hashtable ( array ) or any other method? then i can use hashtable to get desired output ? like for this line "rspedw01.corpads.local=serverName 4=totalSize JC_UNIX_FS01_INCR_DD2=plan1 JC_FS_DD2=plan2 UNIX_FS01_INCR_DD2=pla3 incr=backupType 02/24/2022=BackupDate 03/30/2022=backupRetention1 03/30/2022=backupRetention2 disk=storageType 1645678805=diskId Clone_DR=BackupLocation 4 B=BackuptypeInB/MB/GB/TB /sortarea/saswork=BackupFilesystem MNBDD5304P.CORPADS.LOCAL=backupDevice" – postmaster 420 Mar 31 '22 at 16:13
  • any idea what code be if i have to get all data in hashtable ? – postmaster 420 Mar 31 '22 at 19:35

0 Answers0