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

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

  1. Скопируйте всю строку в новую строку (сохраняя все остальные данные в строке).
  2. Замените значение "Столбец B" значением "Столбец C".

Я в основном делаю import-csv $file. Я экспортирую это позже.

Вот пример: я в основном хочу переместить Task2 в столбец Task1, ЕСЛИ есть какие-либо данные, кроме «-», и тогда я могу игнорировать столбец Task 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,                

person Tommy24    schedule 02.09.2017    source источник
comment
Вы можете опубликовать код, который у вас есть.   -  person ShanayL    schedule 03.09.2017
comment
На данный момент это действительно $ CSV = import-csv ‹path›.   -  person Tommy24    schedule 05.09.2017


Ответы (2)


Другой метод:

$data=import-csv "C:\temp\test.txt"
$data + ($data | where TASK2 -ne "--" |  %{$_.TASK1=$_.TASK2;$_})
person Esperento57    schedule 03.09.2017
comment
Вышеупомянутый метод удалил исходные данные в столбце Task1, поэтому я думаю, что потребуется добавить новую строку и не повлиять ни на одну из текущих строк. - person Tommy24; 05.09.2017
comment
Мой код дает вам результат, который вы привели в пример. Объясни лучше И я это сделаю;) - person Esperento57; 06.09.2017
comment
на самом деле я беру его обратно, он действительно работает, если я просто создаю новый объект ps. Спасибо! - person Tommy24; 07.09.2017

Для относительно небольших файлов 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
person Community    schedule 03.09.2017