使用Powershell

时间:2018-10-15 17:20:33

标签: powershell csv

我有一个包含两列的CSV文件:带有域和日期的服务器名称

servername.domain.domain.com,10/15/2018 6:28
servername1.domain.domain.com,10/13/2018 7:28

我需要删除全限定名称,因此它只有短名称,并且我需要保留第二列,以便通过发送到新的CSV或以某种方式删除该域的方式如下所示。基本上,我希望第二列保持不变,但是在创建具有更改的列1的新CSV时,我需要将其包括在内。

servername,10/15/2018 6:28
servername1,10/13/2018 7:28

我有这个:

Import-Csv "filename.csv" -Header b1,b2 |
    % {$_.b1.Split('.')[0]} |
    Set-Content "filename1.csv"

这很好用,但是问题是新的CSV缺少第二列。我还需要将第二列发送到新的CSV文件。

1 个答案:

答案 0 :(得分:2)

使用计算所得的属性替换您要更改的属性,但其他所有内容保持不变:

Import-Csv 'input.csv' -Header 'b1', 'b2' |
    Select-Object -Property @{n='b1';e={$_.b1.Split('.')[0]}}, * -Exclude b1 |
    Export-Csv 'output.csv' -NoType

请注意,如果CSV数据尚无标题行,则只需使用参数-Header。否则,您应该删除该参数。

如果输入文件没有标题,而您也想创建没有标题的输出文件,则不能使用Export-Csv。使用ConvertTo-Csv创建CSV文本输出,然后跳过第一行(以删除标题),然后使用Set-Content将其余内容写入输出文件。

Import-Csv 'input.csv' -Header 'b1', 'b2' |
    Select-Object -Property @{n='b1';e={$_.b1.Split('.')[0]}}, * -Exclude b1 |
    ConvertTo-Csv -NoType |
    Select-Object -Skip 1 |
    Set-Content 'output.csv'