比较powershell中的两个csv条目

比较powershell中的两个csv条目,powershell,csv,Powershell,Csv,我只是在学习powershell,但遇到了这个让我难堪的错误。目标是获取csv文件并确定文件中有多少组。每个组下都有多个条目。最终的结果是,根据组将文件拆分为不同的数组/字典/whathaveyou(我在3小时前开始使用powershell…),保持TaxonID不变,然后将它们导出到单独的文件中。但现在,我只是处于比较阶段 我的练习数据看起来像 Group,TaxonID AA,1 AA,2 BB,3 BB,4 真实的数据如下所示: Group,TaxonID Bilater

我只是在学习powershell,但遇到了这个让我难堪的错误。目标是获取csv文件并确定文件中有多少组。每个组下都有多个条目。最终的结果是,根据组将文件拆分为不同的数组/字典/whathaveyou(我在3小时前开始使用powershell…),保持TaxonID不变,然后将它们导出到单独的文件中。但现在,我只是处于比较阶段

我的练习数据看起来像

Group,TaxonID  
AA,1  
AA,2  
BB,3  
BB,4
真实的数据如下所示:

Group,TaxonID
Bilateria_Ropsin,Mus_musculus_Rhabdomeric_MEL  
Bilateria_Ropsin,ROp_OG3TodaroP
为此,我尝试将一行中的组与下一行中的组进行比较。如果它们不同,那么我将向变量中添加一个变量以供以后使用。下面是我要做的比较:

Set-Variable -name book -value C:\Users\XXX\Documents\Book1.csv
$work = Import-Csv $book
$numgroups = 0
$i=0
foreach ($Group in $work) {
    $Ogroup = $work[$i] | select-object{$_.Group}
    $nextGroup = $work[$i+1] | select-object{$_.Group}
    $compare = $Ogroup.Equals($nextGroup)
    $compare
    $i++
}
当我打印出$Ogroup和$nextGroup时,它们会给我正确的对(AA-AA,AA-BB,BB-BB),但是$compare总是打印出false。使用Compare对象会导致$nextGroup为null的错误。因此,我选择使用.Equals()。CompareTo()抛出一个错误,说明它不是有效的方法


我被难倒了,需要帮助。

您应该使用
组对象
CmdLet

Set-Variable -name book -value C:\Users\XXX\Documents\Book1.csv
$work = Import-Csv $book

$groups = $work | Group-Object -Property Group
$groups.count
$groups[0].name
$groups[0].Group[0]
for ($i=0 ; $i -lt $groups.count ; $i++) { $groups[$i].name}

for ($i = 0 ; $i -lt $groups.count ; $i++)
{ 
  $groups[$i].name;
  for ($j=0 ; $j -lt $groups[$i].count;$j++)
  {
    $groups[$i].group[$j]
  }
}

不需要比较。首先将各组分开:

$book = "$env:USERPROFILE\Documents\Book1.csv"
$work = Import-CSV $book
$Groups = $work | Group-Object Group
ForEach($Group in $Groups){
    "Group Name: "+$Group.name
    "Taxon IDs: "
    $Group.group.TaxonID
}
如果要将每个组保存到一个文件中,可以在该ForEach循环中执行$group | export csv“c:\path\$($group.name).csv”-notypeinfo


编辑:对不起,当保安通过对讲机给我打电话时,说我的卡车下面的总水管爆裂了,他们需要我去移动我的车辆。我觉得没有把我的车丢到天坑里比这更重要。

你能提前知道会有多少组吗?不幸的是,我现在只是在做比较。完成后,我可以将变量$numgroups绑定到动态创建我需要的组数中…这就是我的计划,我相信我可以提供帮助,但我觉得在宏伟的计划中,当你考虑整个项目时,我们看到的是一个徒劳的练习。为什么要比较PowerShell可以为您将内容分成多个组?听起来很棒!我只是在学习,所以我相信我的方法不是最好的。分类群的分组不直观,允许重复条目(即多个组中的同一分类群)。我将编辑OP,以便您可以看到实际示例的样子。也许那会有帮助?这当然有帮助!但是我不知道如何提取1)组数2)taxonID’你可以使用for循环。非常感谢,但是这似乎并没有像我所说的那样输出组名,你想要的是“组名:”+$Group.Name。希望我能投票(需要更多的代表)。需要大写$Groups.Name中的“n”-否则效果很好!我正试图从下面修改循环,以便只打印出分类单元id,但在不获取@{Group:xx,TaxonID:xx}的情况下无法找出如何引用它们。获取分类单元id确实不需要他的循环。我的给你这些(编辑它来修复,它现在应该正确列出ID)。此外,您不需要在名称中大写N。我按原样运行了ForEach循环,运行得很好。嗯,也许版本不同?不,我错了。它应该是ForEach($Groups中的groupin$Groups),但我有ForEach($Groups中的groupin$Groups.Name),这一切都完了。宾果!非常感谢。如果您不介意解释,$Group in$Groups是如何工作的?我以前没有定义$Group变量。。