Добавить столбец в CSV Windows PowerShell
У меня есть довольно стандартный файл csv с заголовками. Я хочу добавить новый столбец и установить все строки в одни и те же данные.
Оригинал:
column1, column2
1,b
2,c
3,5
После
column1, column2, column3
1,b, setvalue
2,c, setvalue
3,5, setvalue
Я ничего не могу найти на этом, если кто-нибудь может указать мне в правильном направлении, что было бы здорово. Извините, очень новый для Power Shell.
Ответы
Ответ 1
Здесь один из способов сделать это с помощью вычисляемых свойств:
Import-Csv file.csv |
Select-Object *,@{Name='column3';Expression={'setvalue'}} |
Export-Csv file.csv -NoTypeInformation
Подробнее о вычисленных свойствах вы можете найти здесь: http://technet.microsoft.com/en-us/library/ff730948.aspx.
В двух словах вы импортируете файл, перетаскиваете содержимое в командлет Select-Object
, выбираете все существующие свойства (например, '*'), а затем добавляете новый.
Ответ 2
Ответ ShayLevy также работает для меня!
Если вы не хотите предоставлять значение для каждого объекта, код еще проще...
Import-Csv file.csv |
Select-Object *,"column3" |
Export-Csv file.csv -NoTypeInformation
Ответ 3
В некоторых приложениях я обнаружил, что создает хеш-таблицу и использует .values
, чтобы столбец был хорошим (это позволило бы проверять перекрестные ссылки на другой объект, который был перечислим).
В этом случае #powershell на freenode привлек мое внимание к упорядоченной хэш-таблице (поскольку заголовок столбца должен использоваться).
Вот пример без какой-либо проверки .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)}}
}
Пример связан с Как выполнить арифметику для поиска различий значений в двух CSV?
Ответ 4
создать файл csv с nohin в нем
$csv >> "$PSScriptRoot/dpg.csv"
определить путь к файлу csv. здесь $psscriptroot является корнем script
$csv = "$PSScriptRoot/dpg.csv"
теперь добавьте в него столбцы
$csv | select vds, protgroup, vlan, ports | Export-Csv $csv