我尝试通过利用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}
}
它从未创建过文档
答案 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帮助链接来自我的代码块(如果有):
gc
是Get-Content
的别名(在模块Microsoft.PowerShell.Management
中)?
是Where-Object
sls
是Select-String
的别名(在模块Microsoft.PowerShell.Utility
中)Set-Content
(在模块Microsoft.PowerShell.Management
中)