Powershell Import-CSV根据条件创建新行

时间:2017-09-02 23:06:18

标签: powershell csv import-csv

我对脚本编程有点新鲜。我有一个CSV文件,我正在导入和修改数据,因此它以更好的格式呈现 我的问题是我想(我猜)在给定列的所有行上进行foreach循环,如果数据与某个条件不匹配:

  1. 将整行复制到新行(保留所有其他数据) 行)。
  2. 将“Column B”的值替换为“Column C”
  3. 的值

    我基本上在做import-csv $file。我稍后会把它导出。

    这是一个例子:我基本上想要将Task2移动到Task1列中,如果除了“ - ”之外还有任何数据存在,那么我可以忽略任务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 个答案:

答案 0 :(得分:0)

对于相对较小的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

答案 1 :(得分:-1)

其他方法:

$data=import-csv "C:\temp\test.txt"
$data + ($data | where TASK2 -ne "--" |  %{$_.TASK1=$_.TASK2;$_})