我有一个包含两列的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文件。
答案 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'