比较 2 个 csv 并将行差异输出到单独的文件中

问题描述 投票:0回答:1

我有一个 1.csv

姓名、身高、城市、县、州、邮政编码

约翰·多伊,120,杰斐逊,河滨,新泽西州,8075

杰克,严,220,费拉,河滨,宾夕法尼亚州,9119

吉尔,范,120,杰斐逊,河滨,新泽西州,8075

史蒂夫,谭,220,费拉,河滨,宾夕法尼亚州,9119

阿尔法,范,120,杰斐逊,河滨,新泽西州,8075

博客,乔,7,华盛顿,WA.1285

和 2.csv

姓名、身高、城市、县、州、邮政编码

约翰·多伊,120,杰斐逊,河滨,新泽西州,8075

杰克,严,220,费拉,河滨,宾夕法尼亚州,9119

吉尔,范,120,杰斐逊,河滨,新泽西州,8075

史蒂夫,谭,220,费拉,河滨,宾夕法尼亚州,9119

布拉沃,谭,220,费城,河滨,宾夕法尼亚州,9119

我想比较 1.csv 和 2.csv 文件的行并输出满足以下条件的行

如果存在于1.csv和2.csv则输出到Output1.csv

如果2.csv中存在且1.csv中不存在则输出到Output1.csv

如果1.csv中存在且2.csv中不存在则输出到Output2.csv

所以 Output1.csv 应该是

约翰·多伊,120,杰斐逊,河滨,新泽西州,8075

杰克,严,220,费拉,河滨,宾夕法尼亚州,9119

吉尔,范,120,杰斐逊,河滨,新泽西州,8075

史蒂夫,谭,220,费拉,河滨,宾夕法尼亚州,9119

布拉沃,谭,220,费城,河滨,宾夕法尼亚州,9119

Output2.csv 应该是

博客,乔,7,华盛顿,WA.1285

大多数类似的问题仅输出到一个文件,而我需要 2 个输出。这可能吗?

非常感谢

powershell csv join merge output
1个回答
0
投票

使用

Compare-Object
比较两个集合,然后使用内在的
.Where()
扩展方法根据条目是否仅在
a.csv
中找到将结果分成两部分:

$a = Import-Csv path\to\a.csv
$b = Import-Csv path\to\b.csv

$outputs = @(
  # compare the two files, output everything, then split based on side-indicator
  Compare-Object $a $b -IncludeEqual
).Where({$_.SideIndicator -ne '<='}, 'Split')

# first collection will be the ones that satisfied `{$_.SideIndicator -ne '<='}`
$outputs[0] |ForEach-Object InputObject |Export-Csv output1.csv -NoTypeInformation
# second collection will be the ones that didn't, eg. the ones only found in a.csv
$outputs[1] |ForEach-Object InputObject |Export-Csv output1.csv -NoTypeInformation
© www.soinside.com 2019 - 2024. All rights reserved.