当前位置: 首页 > 知识库问答 >
问题:

比较电源外壳中的两个 csv 条目

卫君博
2023-03-14

我只是在学习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总是打印出假的。使用比较对象给我一个关于$nextGroup为空的错误。所以我选择使用.等于()。CompareTo() 抛出一个错误,指出它不是一个有效的方法。

我被难住了,需要帮助。

共有2个答案

匡晟
2023-03-14

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

$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|导出-csv “c:\path\$($Group.name).csv” -notypeinfo

编辑:对不起,我正在寻找答案,这时保安通过对讲机打电话给我,说我卡车下面的水管爆裂了,他们需要我去移动我的车。我想不把我的车丢在天坑里比这更重要。

鄂慈
2023-03-14

您应该使用<code>组对象

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]
  }
}
 类似资料:
  • 问题内容: 我正在尝试比较两个可绘制对象,但没有成功。我做了一些研究,甚至有一个类似的问题,但没有帮助。 在我的应用程序中,我习惯将ImageView放置在EditText的正确位置。然后,我需要检查其中分配了哪些图像资源。 这个小样本应该有用,不是吗?但是,它返回“不等于”。 问题答案: getConstantState不能正常工作 如果您这样做: 您正在比较对象的引用,但它不正确… 改用等于方

  • 问题内容: 我有一个简单的类,其中包含一个字符串(名称)和一个整数(年龄)。应存储在集合中的对象不得具有双名值,并且应根据年龄的降序进行排序。第一个代码示例删除所有双精度名称,但不包含第二个排序条件: 下一个示例比较器将对其余对象集进行排序,该对象集不包含任何重复名称: 第二个比较器正确地根据对象的年龄值对它们进行排序,但是它允许使用重复名称,我不明白,因为外部if语句已经检查了两个对象的名称是否

  • 问题内容: 我有两个表,想要像这样在sqlite上比较行 我想产生这样的结果 sqlite中的语法如何?谢谢 问题答案:

  • 我有两个表,分别是产品和采购: PRODUCTS表-将获得购买的所有新产品。这意味着表prroducts中不存在相同的productname。所有独特产品列表 采购表-具有唯一purchase_id的所有采购产品的列表。 > 如果要在PURCHASE中添加或插入值,表PRODUCTS将获得PURCHASE的所有值,但前提是PURCHASE中的productname不存在于PRODUCTS中的'pr

  • 我正在用我的“CsvReader”读取csv文件,如下所示: 我使用的csv如下所示: 雇员的dataVO看起来像 包com。cg。dto; 公营雇员{ 字符串empId; 字符串名称; 薪酬; 公共字符串getEmpId(){ 返回empId; } public void setEmpId(字符串empId){ 这empId=empId; } 公共字符串 返回empName; } public

  • 问题内容: 我需要在Java中比较两个日期。我正在使用这样的代码: 这是行不通的。变量的内容如下: 包含 包含 我该如何解决? 问题答案: 日期相等性取决于两个等于毫秒的日期。使用创建新的Date对象将永远不会等于过去创建的日期。Joda Time 的API简化了日期的处理。但是,仅使用Java的SDK: