Powershell Import-CSV Создать новую строку на основе условия
Я немного новичок в сценарии в целом. У меня есть файл CSV, который я импортирую и изменяю данные, чтобы он представлял их в лучшем формате.
Мой вопрос заключается в том, что я хочу сделать (я предполагаю) цикл foreach для всех строк данного столбца, и если данные не соответствуют определенным критериям:
- Скопируйте всю строку в новую строку (сохранив все остальные данные в строке).
- Замените значение "Столбец B" значением "Столбец C"
Я в основном делаю import-csv $file
, Я экспортирую это позже.
Вот пример: я в основном хочу переместить задачу 2 в столбец задачи 1, если есть какие-либо данные, кроме "-", и тогда я могу игнорировать столбец задачи 2.
Import-csv
дает мне это:
ID, TASK1, TASK2
123, A, --
456, B, --
789, C, D,
But I want it to look like this:
ID, TASK1, TASK2
123, A , --
456, B, --
789, C, D,
789, D, D,
2 ответа
Решение
Другой метод:
$data=import-csv "C:\temp\test.txt"
$data + ($data | where TASK2 -ne "--" | %{$_.TASK1=$_.TASK2;$_})
Для относительно небольших CSV-файлов это может быть способом ($CSV+= каждый раз воссоздает var):
## Q:\Test\2017\09\03\SO_46018965.ps1
$CSV = import-csv 'test.csv'
foreach ($Row in $CSV){
if ($Row.TASK1 -eq 'C'){
$NewRow=[PSCustomObject]@{
ID = $Row.ID
TASK1 = $Row.TASK2
TASK2 = $Row.TASK2}
$CSV+=$NewRow
}
}
$CSV
Образец вывода:
ID TASK1 TASK2
-- ----- -----
123 A --
456 B --
789 C D
789 D D