我想比较file1.csv和file2.csv中两列的值,然后将匹配的值分配给file1.csv中的新列。
ATM,这是目前为止的工作。格式越简单越好。
$report = Import-CSV -Path "C:report.csv" -Encoding UTF8
$reference = Import-CSV -Path "C:team.csv" -Encoding UTF8
foreach ($team1 in $report){
$matched = $false
foreach ($team2 in $reference){
$obj = "" | select "Type","Setup","Responsible","Team","Main"
if($team1.'Setup' -like "*$($team2.'Main')*"){
$matchCounter++
$matched = $true
$obj.'Type' = $team1.'Type'
$obj.'Setup' = $team1.'Setup'
$obj.'Responsible' = $team1.'Responsible'
$obj.'Team' = $team2.'Team'
$obj | Export-Csv -Path "C:Output.csv" -Append -NoTypeInformation -Encoding
UTF8
}
}
}
文件是这样的;
file1
type setup responsible
---- ------- -----------
y master fin susan
y sensei kuno peter
y sensei jon peter
y junior jumo
file2
main team
---- -----
master sa1
sensei sr2
jumo st6
desired file3
type setup responsible team
---- ------- ----------- -----
y master fin susan sa1
y sensei kuno peter sr2
y sensei jon peter sr2
y junior jumo st6
我想要实现的是将列setup
和responsible
(file1)与main
列(file2)进行比较,并得到其相邻的team
。现在,我不知道如何在没有file2引用的情况下跳过column1中的单元格,但存在于column2中。同样,只比较file1和file2中setup
的第一个字符。
我猜你只是想这样做:
# $report = Import-CSV -Path "C:report.csv" -Encoding UTF8
$report = ConvertFrom-Csv @'
type, setup, responsible
y, master fin, susan
y, sensei kuno, peter
y, sensei jon, peter
y, junior, jumo
'@
# $reference = Import-CSV -Path "C:team.csv" -Encoding UTF8
$reference = ConvertFrom-Csv @'
main, team
master, sa1
sensei, sr2
jumo, st6
'@
foreach ($team1 in $report){
foreach ($team2 in $reference){
if($team1.Setup[0] -eq $team2.Main[0]){
[pscustomobject]@{
Type = $team1.Type
Setup = $team1.Setup
Responsible = $team1.Responsible
Team = $team2.Team
}
}
}
} # |Export-Csv -Path .Output.csv -NoTypeInformation -Encoding UTF8
结果:
Type Setup Responsible Team
---- ----- ----------- ----
y master fin susan sa1
y sensei kuno peter sr2
y sensei jon peter sr2
y junior jumo st6
请注意,为了正确使用PowerShell Pipeline(和性能原因),最终的(Export-Csv
) cmdlet不应该驻留在进程中,而应该位于管道的末尾。