Ho un file csv abbastanza standard con intestazioni che voglio aggiungere una nuova colonna e impostare tutte le righe sugli stessi dati.
column1, column2 1,b 2,c 3,5
column1, column2, column3 1,b, setvalue 2,c, setvalue 3,5, setvalue
Non riesco a trovare nulla su questo se qualcuno potrebbe indicarmi la giusta direzione che sarebbe grande. Scusa molto nuovo per Power Shell.
Ecco un modo per farlo usando le Proprietà calcolate:
Import-Csv file.csv | Select-Object *,@{Name='column3';Expression={'setvalue'}} | Export-Csv file.csv -NoTypeInformation
Puoi trovare ulteriori informazioni sulle proprietà calcolate qui: http://technet.microsoft.com/en-us/library/ff730948.aspx .
In poche parole, si importa il file, si reindirizza il contenuto al cmdlet Select-Object
, si selezionano tutte le proprietà esistenti (ad esempio ‘*’) e ne si aggiunge uno nuovo.
La risposta di ShayLevy funziona anche per me!
Se non vuoi fornire un valore per ogni object, il codice è ancora più semplice …
Import-Csv file.csv | Select-Object *,"column3" | Export-Csv file.csv -NoTypeInformation
Per alcune applicazioni, ho trovato che produrre una tabella hash e usare i .values
la colonna fosse buona (consentirebbe la convalida del riferimento incrociato contro un altro object che veniva enumerato).
In questo caso, #powershell su freenode ha portato la mia attenzione su una tabella hash ordinata (poiché l’intestazione della colonna deve essere utilizzata).
Ecco un esempio senza alcuna validazione dei .values
$newcolumnobj = [ordered]@{} #input data into a hash table so that we can more easily reference the `.values` as an object to be inserted in the CSV $newcolumnobj.add("volume name", $currenttime) #enumerate $deltas [this will be the object that contains the volume information `$volumedeltas`) # add just the new deltas to the newcolumn object foreach ($item in $deltas){ $newcolumnobj.add($item.volume,$item.delta) } $originalcsv = @(import-csv $targetdeltacsv) #thanks to pscookiemonster in #powershell on freenode for($i=0; $i -lt $originalcsv.count; $i++){ $originalcsv[$i] | Select-Object *, @{l="$currenttime"; e={$newcolumnobj.item($i)}} }
L’esempio è relativo a Come posso eseguire l’aritmetica per trovare differenze di valori in due CSV?
crea un file CSV con niente in esso
$csv >> "$PSScriptRoot/dpg.csv"
definire il percorso del file csv. qui $ psscriptroot è la radice dello script
$csv = "$PSScriptRoot/dpg.csv"
ora aggiungi colonne ad esso
$csv | select vds, protgroup, vlan, ports | Export-Csv $csv