SQL 查询数组或散列 table

SQL query on array or hash table

有没有人有创造性的方法来处理多维数组或散列 table 就像处理数据库 table 这样您就可以执行简单的 SELECT-WHERE、SUM、 COUNT 和 GROUP-BY 或等效查询?

这是我要解析到不同的汇总文件中的一些样本数据。我查看每一行的第一个字段,然后对以 SD 开头的行中的数据进行分组或求和。我不知道我应该了解多少细节,但事实上,我还不够了解 PS 还不足以让我的脚本变得性感:

OH;1;ACME Inc;Arlington,VA 22204,USA;CSV;wiley@acme.inc;2018-01-07;;8074688;
SD;2;8074688;M/C;2018-01-05;00000523094871;04.01.18;04.01.18;2804,00;35,34;2768,66;6;89005257251;;;
SD;3;8074688;VISA;2018-01-05;00000523085587;05.01.18;05.01.18;1070,00;13,48;1056,52;1;91005299658;;;
SD;4;8074688;VISA;2018-01-05;00000523088281;05.01.18;05.01.18;3850,00;48,51;3801,49;4;91005299661;;;
SD;5;8074688;M/C;2018-01-05;00000523088281;05.01.18;05.01.18;1100,00;13,86;1086,14;2;91005299667;;;
SD;6;8074688;MSTO;2018-01-05;00000523088281;05.01.18;05.01.18;1100,00;13,86;1086,14;1;91005299671;;;
SD;7;8074688;MCDE;2018-01-05;00000523091962;04.01.18;04.01.18;46,00;0,58;45,42;1;91005299674;;;
SD;8;8074688;VISA;2018-01-05;00000524454189;02.01.18;04.01.18;900,00;11,32;888,68;19;91005299677;;;
SD;9;8074688;M/C;2018-01-05;00000524454189;02.01.18;04.01.18;420,00;5,29;414,71;9;91005299698;;;
SD;10;8074688;MSTO;2018-01-05;00000524454189;03.01.18;03.01.18;290,00;3,66;286,34;4;91005299709;;;
SD;11;8074688;VISA;2018-01-05;00000523082217;05.01.18;05.01.18;500,00;6,30;493,70;1;91005702322;;;
SD;12;8074688;M/C;2018-01-05;00000523082217;05.01.18;05.01.18;300,00;3,78;296,22;1;91005702325;;;
SD;13;8074688;VISA;2018-01-05;00000523087382;05.01.18;05.01.18;1116,00;14,06;1101,94;3;91005702328;;;
SD;14;8074688;M/C;2018-01-05;00000523087382;05.01.18;05.01.18;1840,00;23,19;1816,81;5;91005702333;;;
BD;15;8074688;;2018-01-07;0111800705600;15336,00;193,23;15142,77;57;;
TD;16;8074688;M/C;;00000523094 871;;;;89005257251; 
TD;17;8074688;MC CONS CR;2018-01-04;143954;;X9235;500,00;89005257251; 
TD;18;8074688;MC CONS CR;2018-01-04;150906;;X2107;52,00;89005257251; 
TD;19;8074688;MC CONS CR;2018-01-04;153840;;X6804;1000,00;89005257251; 
TD;20;8074688;MC CONS CR;2018-01-04;173636;;X2107;52,00;89005257251; 
TD;21;8074688;MC CONS CR;2018-01-04;193801;;X1042;200,00;89005257251; 
TD;22;8074688;MC CONS CR;2018-01-04;223605;;X3268;1000,00;89005257251;

您提供的示例是带有 semi-colon 个分隔符的 CSV。

要理解的一个关键概念是 PowerShell 处理 objects。试试这个:

 $test = "some string"
 $test.Length          # returns 11

您不必告诉 PowerShell 字符串的长度;它是字符串 object.

的 属性

同样:

$test2 = @("some string","some other string")
$test2.Count           # returns 2

回到您的数据,您可以使用 Import-Csv:

将其导入 PowerShell
$myData = Import-Csv -Path "c\path\to\your\file.txt" -Delimiter ";"

请记住,这会抱怨缺少 headers。因为您的第一行的字段少于大多数其他行,而不是因为它认识到它不是 header;默认情况下,Import-Csv 将假设第一行是 header。您可以使用 -Header 参数指定 headers,如上面 link.

中所述

变量$myData的类型是PSCustomObject。您可以使用 Get-Content 并将数据操作到数组或哈希表中……但为什么呢? Import-Csv 给你一个很好的 object 字段随时可用 NoteProperties:

$myData.OH   # prints off the first column, assuming a header is not provided.

要以我感觉您已经在 SQL 中使用的方式操作数据,您需要熟悉 PowerShell 必须提供的功能。所以这里有一些 RTFM links 可以帮助您入门;-p