继续我的评论。
你有很多事情要做;即,一些代理功能等。
像你一样混合这些项目,你最终会得到这样的东西......(当然非常简化,因为你要展示你的输入,你迫使我们猜测想出一个。)
psEdit -filenames 'D:\temp\book1.txt'
# Results
<#
Site,Dept,Office,Floor
Main,aaa,bbb,ccc
Main0,aaa,bbb,ccc
Branch1,ddd,eee,fff
Branch2,ggg,hhh,iii
#>
psEdit -filenames 'D:\temp\book3.txt'
# Results
<#
Site,Dept,Office,Floor
Main,aaa,bbb,ccc
Branch1,ddd,eee,fff
Branch2,ggg,hhh,iii
Branch3,jjj,kkk,lll
Branch4,mmm,nnn,ooo
#>
更新:
删除所有以前的东西,因为它们不是你的那杯茶......
;-}
Compare-Object2 -ReferenceObject (Get-Content -Path 'D:\temp\book1.txt') -DifferenceObject (Get-Content -Path 'D:\temp\book3.txt') |
Export-Csv -Path 'D:\Temp\CompareObject.csv' -NoTypeInformation -Force
(Select-String -Path 'D:\Temp\CompareObject.csv' -Pattern '\<=') -replace '.*CompareObject.*:\"|\"\,.*' |
ConvertFrom-Csv -Header Site, Dept, Office, Floor |
Export-Csv -Path 'D:\temp\ReferenceObject.csv' -NoTypeInformation -Force
(Select-String -Path 'D:\Temp\CompareObject.csv' -Pattern '\=>') -replace '.*CompareObject.*:\"|\"\,.*' |
ConvertFrom-Csv -Header Site, Dept, Office, Floor |
Export-Csv -Path 'D:\temp\DifferenceObject.csv' -NoTypeInformation -Force
$FileList = 'ReferenceObject.csv', 'DifferenceObject.csv'
$FileList |
ForEach-Object {
"`n********* Getting content $PSItem *********`n"
Import-Csv -Path "D:\temp\$PSItem"
}
# Results
<#
********* Getting content ReferenceObject.csv *********
Site Dept Office Floor
---- ---- ------ -----
Main0 aaa bbb ccc
********* Getting content DifferenceObject.csv *********
Branch3 jjj kkk lll
Branch4 mmm nnn ooo
#>
所以,至于你的最后一条评论:
虽然该方法仍然使用中间文件;我承认我完全没有考虑导出组合文件然后拆分它的简单方法。***
好的,那么,不使用“中间文件”。
($ComparedObjects = Compare-Object2 -ReferenceObject (Get-Content -Path 'D:\temp\book1.txt') -DifferenceObject (Get-Content -Path 'D:\temp\book3.txt'))
# Results
<#
InputObject SideIndicator
----------- -------------
Main0,aaa,bbb,ccc <=
Branch3,jjj,kkk,lll =>
Branch4,mmm,nnn,ooo =>
#>
($ComparedObjects -match '<=').InputObject |
ConvertFrom-Csv -Header Site, Dept, Office, Floor
# Results
<#
Site Dept Office Floor
---- ---- ------ -----
Main0 aaa bbb ccc
#>
($ComparedObjects -match '=>').InputObject |
ConvertFrom-Csv -Header Site, Dept, Office, Floor
# Results
<#
Site Dept Office Floor
---- ---- ------ -----
Branch3 jjj kkk lll
Branch4 mmm nnn ooo
#>
然后只是导出到 csv。
($ComparedObjects -match '<=').InputObject |
ConvertFrom-Csv -Header Site, Dept, Office, Floor |
Export-Csv -Path 'D:\temp\ReferenceObject.csv' -NoTypeInformation -Force
($ComparedObjects -match '=>').InputObject |
ConvertFrom-Csv -Header Site, Dept, Office, Floor |
Export-Csv -Path 'D:\temp\DifferenceObject.csv' -NoTypeInformation -Force
根据需要回读
$FileList = 'ReferenceObject.csv', 'DifferenceObject.csv'
$FileList |
ForEach-Object {
"`n********* Getting content $PSItem *********`n"
Import-Csv -Path "D:\temp\$PSItem"
}
# Results
<#
********* Getting content ReferenceObject.csv *********
Site Dept Office Floor
---- ---- ------ -----
Main0 aaa bbb ccc
********* Getting content DifferenceObject.csv *********
Branch3 jjj kkk lll
Branch4 mmm nnn ooo
#>
更新
根据你的评论——
“问题是最终的输出需要:带有附加列的 Unicode 制表符分隔的文本。”
(($ComparedObjects -match '<=').InputObject) -replace ',', "`t" |
ConvertFrom-Csv -Delimiter "`t" -Header Site, Dept, Office, Floor |
Export-Csv -Path 'D:\temp\ReferenceObject.csv' -Encoding Unicode -NoTypeInformation -Force
Import-Csv -Path 'D:\temp\ReferenceObject.csv'
# Results
<#
Site Dept Office Floor
---- ---- ------ -----
Main0 aaa bbb ccc
#>
(($ComparedObjects -match '=>').InputObject) -replace ',', "`t" |
ConvertFrom-Csv -Delimiter "`t" -Header Site, Dept, Office, Floor |
Export-Csv -Path 'D:\temp\DifferenceObject.csv' -Encoding Unicode -NoTypeInformation -Force
Import-Csv -Path 'D:\temp\DifferenceObject.csv'
# Results
<#
Site Dept Office Floor
---- ---- ------ -----
Branch3 jjj kkk lll
Branch4 mmm nnn ooo
#>
或者对于额外的列内容,你可以这样做......
$ComparedObjects -match '<=' |
Select-Object -Property @{
Name = 'Site'
Expression = {($PSItem.InputObject -split ',')[0]}
},
@{
Name = 'Dept'
Expression = {($PSItem.InputObject -split ',')[1]}
},
@{
Name = 'Office'
Expression = {($PSItem.InputObject -split ',')[2]}
},
@{
Name = 'Floor'
Expression = {($PSItem.InputObject -split ',')[3]}
},
@{
Name = 'Label'
Expression = {'Good'}
},
@{
Name = 'Placeholder'
Expression = {0}
} |
Export-Csv -Path 'D:\temp\ReferenceObject.csv' -Encoding Unicode -NoTypeInformation -Force
(Get-Content -Path 'D:\temp\ReferenceObject.csv') -replace '"','' -replace ',', "`t" |
Set-Content -PassThru 'D:\temp\ReferenceObject.csv'
Import-Csv -Path 'D:\temp\ReferenceObject.csv' -Delimiter "`t" |
Format-Table -AutoSize
# Results
<#
Site Dept Office Floor Label Placeholder
---- ---- ------ ----- ----- -----------
Main0 aaa bbb ccc Good 0
#>
$ComparedObjects -match '=>' |
Select-Object -Property @{
Name = 'Site'
Expression = {($PSItem.InputObject -split ',')[0]}
},
@{
Name = 'Dept'
Expression = {($PSItem.InputObject -split ',')[1]}
},
@{
Name = 'Office'
Expression = {($PSItem.InputObject -split ',')[2]}
},
@{
Name = 'Floor'
Expression = {($PSItem.InputObject -split ',')[3]}
},
@{
Name = 'Label'
Expression = {'Good'}
},
@{
Name = 'Placeholder'
Expression = {0}
} |
Export-Csv -Path 'D:\temp\DifferenceObject.csv' -Encoding Unicode -NoTypeInformation -Force
(Get-Content -Path 'D:\temp\DifferenceObject.csv') -replace '"','' -replace ',', "`t" |
Set-Content -PassThru 'D:\temp\DifferenceObject.csv'
Import-Csv -Path 'D:\temp\DifferenceObject.csv' -Delimiter "`t" |
Format-Table -AutoSize
# Results
<#
Site Dept Office Floor Label Placeholder
---- ---- ------ ----- ----- -----------
Branch3 jjj kkk lll Good 0
Branch4 mmm nnn ooo Good 0
#>