所以我有2个文件具有相同的列出内容样式 - 字体ID,字体Def和时间戳。我想获取第二个新字体文件,并使用powershell替换第一个具有匹配字体ID的文件的行(没有数据库,这将大大简化)。
File2 text line = [FontIDA01] 5,5,5,5,randomtext,11/10/2001 应该替换[FontIDA01]匹配的File1行,并将5,5,5,5替换为6,6,6,6,并将日期替换为该行上的日期。
$content = Get-Content $fileSelected #(path chosen by user)
$masterContent = Get-Content $masterContentPath #(hardcoded path)
foreach($line in content)
{
$fontID = $line.SubString($startFontID, $endFontID)#this just sets font id = 23jkK instead of [23jkK]
foreach($masterLine in $masterContent)
{
if ($masterLine.Contains($fontID))
{
$masterContent -replace $masterLine, $line where-Object{$_.Name -contains $fontID} | Set-Content $masterContent -raw
}
}
}
我甚至关闭了吗?
答案 0 :(得分:1)
在字典中收集新数据并将其用于替换:
# get new data in a dictionary
$newData = @{}
Get-Content 2.txt | %{
$parts = $_ -split ' '
$newData[$parts[0]] = @{numbers=$parts[1]; date=$parts[3]}
}
#patch original data using the new data dictionary
Get-Content 1.txt | %{
$parts = $_ -split ' '
$id = $parts[0]
$new = $newData[$id]
if ($new) {
$id, $new.numbers, $parts[2], $new.date -join ' '
} else {
$_
}
} | Out-File 3.txt -Encoding utf8
此代码假设字段由空格分隔,因此如果不是这种情况,您将不得不使用其他方法来提取诸如Select-String
或regexp匹配的部分:if ($_ -match '(.+?) ([\d,]+) and so on') { $id = $matches[0] }
。