0

一般来说,我对脚本有点陌生。我有一个 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,                
4

2 回答 2

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
于 2017-09-03T00:57:25.177 回答
-1

其他方法:

$data=import-csv "C:\temp\test.txt"
$data + ($data | where TASK2 -ne "--" |  %{$_.TASK1=$_.TASK2;$_})
于 2017-09-03T09:20:46.010 回答