Powershell Import-CSV Создать новую строку на основе условия

Я немного новичок в сценарии в целом. У меня есть файл CSV, который я импортирую и изменяю данные, чтобы он представлял их в лучшем формате.
Мой вопрос заключается в том, что я хочу сделать (я предполагаю) цикл foreach для всех строк данного столбца, и если данные не соответствуют определенным критериям:

  1. Скопируйте всю строку в новую строку (сохранив все остальные данные в строке).
  2. Замените значение "Столбец 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
Другие вопросы по тегам