我有一个 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 个输出。这可能吗?
非常感谢
使用
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