1 votos

Realice Math entre dos archivos CSV y genere como nuevo archivo CSV (O imprima la diferencia más grande)

Tengo dos archivos CSV con el FileCount y Foldersize de las mismas carpetas, tomadas en diferentes momentos. (Mismos títulos, mismas filas y columnas. La única diferencia entre estos dos archivos es el filecount y tamaño de la carpeta de valores)

Necesito comparar los dos, y el informe sobre las subcarpetas con el cambio más importante en la filecount, y el cambio más importante en la foldersize.

extracto de CSV a continuación.

CSV1

Directory         FileCount   FolderSize
D:\test\Documents   61         18.75
D:\test\Media       61         67,488.43
D:\test\Photos      53         7.88

CSV2

Directory         FileCount   FolderSize
D:\test\Documents   61        18.75
D:\test\Media       59        62,192.40
D:\test\Photos      32        6.51

Hasta ahora tengo la de abajo, pero es producir una copia exacta de CSV1, sin realizar los cambios que tengo en el bucle do. ¿Qué estoy haciendo mal?

#Importing CSV files
$CSV1 = Import-Csv -Path D:\test\folderstat1.csv
$CSV2 = Import-Csv -Path D:\test\folderstat2.csv

#Setting counts for do loop
$end     = $csv1.Count
$count   = 0

#Set $csv1 Filecount and foldersize to the difference between the row in CSV1 #and CSV2
do{
$csv1.filecount[$count] = $csv1.filecount[$count] - $csv2.filecount[$count]
$csv1.FolderSize[$count] = $csv1.FolderSize[$count] - $csv2.FolderSize[$count]
    $count++
}until($count -eq $end)

$CSV1 | export-csv D:\test\out.csv -NoTypeInformation

0voto

LotPings Puntos 62

Está colocando el índice incorrectamente. Tratar:

 $csv1[$count].filecount -= $csv2[$count].filecount
$csv1[$count].FolderSize-= $csv2[$count].FolderSize
 

O crea un nuevo CSV3

 ## Q:\Test\2018\06\01\SU_1327671.ps1
#Importing CSV files
$CSV1 = Import-Csv -Path "D:\test\folderstat1.csv"
$CSV2 = Import-Csv -Path "D:\test\folderstat2.csv"
#Setting counts for do loop
$end     = $csv1.Count
$count   = 0

#Set $CSV3 Filecount and foldersize to the difference between the row in CSV1 #and CSV2

$CSV3 = do{
    [PSCustomObject]@{
        Directory =  $csv1[$count].Directory
        Filecount = ($csv1[$count].filecount  - $csv2[$count].filecount)
        FolderSize= ($csv1[$count].FolderSize - $csv2[$count].FolderSize)
    }
    $count++
} until($count -eq $end)
$CSV3 | Export-Csv "D:\test\out.csv" -NoTypeInformation

"=" * 50

$CSV3 | Sort {[Math]::Abs($_.FolderSize)} -Desc | Select -First 1|
    ForEach{"Largest (absolute) change {0} in {1}" -f $_.FolderSize,$_.Directory}
 

Muestra de salida:

 > . .\SU_1327671.ps1
==================================================
Largest (absolute) change 5296 in D:\test\Media
 

 > import-csv .\out.csv

Directory         Filecount FolderSize
---------         --------- ----------
D:\test\Documents 0         0
D:\test\Media     2         5296
D:\test\Photos    21        1,37
 

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: