具有返回字符的Powershell Import-csv

时间:2016-11-07 21:55:26

标签: powershell import-csv

我尝试通过利用import-csv将文本文件转换为文档,其中原始文档中的每个项目都是新行

示例file.txt

James Cameron
Kirk Cobain
Linda Johnson

代码:

$array = import-csv file.txt | ConvertFrom-Csv -Delim `r

foreach ($Data in $array)
 {
    if (sls $Data Master.txt -quiet)
    {Add-Content file.txt $Data}
 }

它从未创建过文档

1 个答案:

答案 0 :(得分:0)

Import-Csv获取CSV并输出PSCustomObject s。它适用于文件具有标题行的情况,并将其作为对象的属性读取。 e.g。

FirstName,LastName
James,Cameron
Kirk,Cobain

# ->

@{FirstName='James';LastName='Cameron'}
@{FirstName='Kirk';LastName='Cobain'}
etc.

如果你的文件没有标题行,它将占用第一行,然后破坏其他所有内容。您需要提供-Header 'h1','h2',...参数来解决这个问题。所以你可以使用-Header Name,但你的数据只有一个属性,所以没有多大好处。

ConvertFrom-Csv旨在做同样的事情,但是来自变量中的CSV数据而不是文件。他们没有有用的联系在一起。它会尝试,但你最终得到的是......

单个对象,其属性名为'@{James=Kirk}',值为'@{James=Linda}',其中' James'从第1行作为列标题获取,奇怪的语法是通过第二次转换强制这些对象。

您从file.txt读取并添加到file.txt并不清楚。但由于您没有CSV,因此使用CSV cmdlet无益处。

$lines = Get-Content file.txt
$master = Get-Content master.txt

foreach ($line in $lines)
{
    if ($master -contains $line)
    {
        Add-Content file2.txt $line
    }
}

或只是

gc file.txt |? { sls $_ master.txt -quiet } | set-content file2.txt

自我生成的PS帮助链接来自我的代码块(如果有):

  • gcGet-Content的别名(在模块Microsoft.PowerShell.Management中)
  • ?Where-Object
  • 的别名
  • slsSelect-String的别名(在模块Microsoft.PowerShell.Utility中)
  • Set-Content(在模块Microsoft.PowerShell.Management中)