首页 > 解决方案 > Powershell + csv:读取第1列,修改内容并将其写在第2列中

问题描述

我在Powershell方面真的不是那么好,只能与很多谷歌研究相处。

我有一个 CSV 文件,第 1 列中有一堆单词。

例如:

Wild
Copy
Hell
Tom
Snow

我想编写一个 Powershell 脚本,它在每一行中读取第 1 列中写入的内容,向其中添加字符并将其写在第 2 列中。

例如:

Coumn1 - Column2
Wild - Wildcat
Copy - Copycat
Hell - Hellcat
Tom - Tomcat
Snow - Snowcat

我真的没有什么几乎可以工作的东西,我有这样的想法:

$CSV = Import-CSV 'c:/Path2CSV'

ForEach ($row in $CSV)
{
    $Modified = Column1 + "cat"
    write $Modified > column2
    }
}

如果有人能给我一个提示,我会很高兴。

预先感谢您的任何回复

标签: powershellcsv

解决方案


如果您的输入 csv(只有一列)在值上方有一个标题,请使用

$CSV = Import-CSV -Path 'C:\Path\To\input.csv'

如果这个文件只是一系列单词,每个单词都在自己的行中并且没有标题,请使用

$CSV = Import-CSV -Path 'C:\Path\To\input.csv' -Header Column1

然后,当您在变量 $CSV 中有数据时,循环并创建一个新的 csv:

$newCsv = foreach ($row in $CSV) {
    # output an Object that gets collected in variable $newCsv
    # Select-Object * takes everything already in $row, 
    # @{Name = 'Column2'; Expression = {$row.Column1 + 'cat'}} adds the extra column to it.
    $row | Select-Object *, @{Name = 'Column2'; Expression = {$row.Column1 + 'cat'}}
}

# output on screen:
$newCsv

# output to new CSV file
$newCsv | Export-Csv -Path 'C:\Path\To\output.csv' -NoTypeInformation

输出(在屏幕上):

Column1 Column2
------- -------
Wild    Wildcat
Copy    Copycat
Hell    Hellcat
Tom     Tomcat 
Snow    Snowcat

有更多方法可以实现你想要的,上面只是尽量接近你建议的伪代码


推荐阅读