0

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

示例文件.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}
 }

它从未创建过文档

4

1 回答 1

0

Import-Csv接受 CSV 并输出PSCustomObjects。它适用于文件具有标题行的情况,并将其读取为对象的属性。例如

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
于 2016-11-07T22:21:57.517 回答