首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Powershell:使用import-csv按列值选择行,并将每个唯一值的行数导出到csv。

Powershell:使用import-csv按列值选择行,并将每个唯一值的行数导出到csv。
EN

Stack Overflow用户
提问于 2022-10-28 17:52:58
回答 1查看 92关注 0票数 1

我有一个csv,我希望在一个名为"art“的列中为每个唯一值提取10行PowerShell。在唯一的艺术价值已经被确定后,我需要那些值的精csv文件。我写的代码对我没有用。

代码语言:javascript
复制
If (Test-Path D:\WORK\JetLetter\TPL\TPL_SNAP\data\TPL_Mailer.csv){

$source=Get-ChildItem "D:\WORK\JetLetter\TPL\TPL_SNAP\data\TPL_Mailer.csv" | select -Last 1
$csvFile = 'D:\WORK\JetLetter\TPL\TPL_SNAP\data\TPL_Mailer.csv'
$arttag = Import-Csv $csvFile | Group-Object | Select-Object "art" -Force
Export-csv $arttag
}

我得到的错误是:

代码语言:javascript
复制
Select-Object : A parameter cannot be found that matches parameter name 'Force'.
At line:5 char:62
+ $arttag = Import-Csv $csvFile | Group-Object | Select-Object -Force
+                                                              ~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Select-Object], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.SelectObjec 
   tCommand
 
Export-Csv : Cannot validate argument on parameter 'Path'. The argument is null or empty. 
Provide an argument that is not null or empty, and then try the command again.
At line:6 char:12
+ Export-csv $arttag
+            ~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Export-Csv], ParameterBindingValidationExcepti 
   on
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.E 
   xportCsvCommand

导入的csv将有多个具有名称、地址、art标记和序列号的行。

代码语言:javascript
复制
sequence art last  first  address         city    st zip
       1 3S  Doe   John   123 Any Street  AnyTown CA 12345
      11 OG  Dow   Jane   124 Any Street  AnyTown CA 12346
      21 OGF Cool  Joe    125 Any Street  AnyTown CA 12347
      31 SLV Cool  Carol  126 Any Street  AnyTown CA 12348
      41 SMP Bravo Johnny 127 Any Street  AnyTown CA 12349

无论数据中有哪些现有列,我都需要导出一个csv,其中包含每个art值的10行。

任何帮助都将不胜感激。

我修改了脚本,使它更简单,但我没有看到我需要的结果。

代码语言:javascript
复制
$source=Get-ChildItem 'D:\WORK\JetLetter\TPL\TPL_SNAP\data\TPL_Mailer.csv' | select  -Last 1
$csvFile = 'D:\WORK\JetLetter\TPL\TPL_SNAP\data\TPL_Mailer.csv'
import-csv $csvFile | Select-Object -Property 'art' -Unique | export-csv 'D:\WORK\JetLetter\TPL\TPL_SNAP\data\art_proofs.csv' -NoTypeInformation

我得到的是:

代码语言:javascript
复制
art
APS
DWS

我需要每一列与每个艺术行的标题。我正在寻找的是一种方式过滤的艺术标签和导出过滤的结果。进口的csv可有1000至40万份记录。例如:

代码语言:javascript
复制
sequence    art last    first   address     city    st  zip
1           3S  Doe     John    123 Any Street  AnyTown CA  12345
2           OG  Dow     Jane    124 Any Street  AnyTown CA  12346
3           OGF Cool    Joe     125 Any Street  AnyTown CA  12347
4           SLV Cool    Carol   126 Any Street  AnyTown CA  12348
5           SMP Bravo   Johnny  127 Any Street  AnyTown CA  12349
6           3S  Doe     John    128 Any Street  AnyTown CA  12350
7           OG  Dow     Jane    129 Any Street  AnyTown CA  12351
8           OGF Cool    Joe     130 Any Street  AnyTown CA  12352
9           SLV Cool    Carol   131 Any Street  AnyTown CA  12353
10          SMP Bravo   Johnny  132 Any Street  AnyTown CA  12354
11          3S  Doe     John    133 Any Street  AnyTown CA  12355
12          OG  Dow     Jane    134 Any Street  AnyTown CA  12356
13          OGF Cool    Joe     135 Any Street  AnyTown CA  12357
14          SLV Cool    Carol   136 Any Street  AnyTown CA  12358
15          SMP Bravo   Johnny  137 Any Street  AnyTown CA  12359
16          3S  Doe     John    138 Any Street  AnyTown CA  12360
17          OG  Dow     Jane    139 Any Street  AnyTown CA  12361
18          OGF Cool    Joe     140 Any Street  AnyTown CA  12362
19          SLV Cool    Carol   141 Any Street  AnyTown CA  12363
20          SMP Bravo   Johnny  142 Any Street  AnyTown CA  12364

输出文件应该如下所示:

代码语言:javascript
复制
sequence    art last    first   address         city    st  zip
1           3S  Doe     John    123 Any Street  AnyTown CA  12345
6           3S  Doe     John    128 Any Street  AnyTown CA  12350
2           OG  Dow     Jane    124 Any Street  AnyTown CA  12346
7           OG  Dow     Jane    129 Any Street  AnyTown CA  12351
3           OGF Cool    Joe     125 Any Street  AnyTown CA  12347
8           OGF Cool    Joe     130 Any Street  AnyTown CA  12352
4           SLV Cool    Carol   126 Any Street  AnyTown CA  12348
9           SLV Cool    Carol   131 Any Street  AnyTown CA  12353
5           SMP Bravo   Johnny  127 Any Street  AnyTown CA  12349
10          SMP Bravo   Johnny  132 Any Street  AnyTown CA  12354

如您所见,文件已被过滤到art列中每个值的2行。首先,导入csv需要按art列排序,然后筛选到每个art值2行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-01 17:36:52

通过查看您的输出,您似乎看到了组,艺术列,然后从每个组中选择前2个对象并输出它们。为此,您可以使用Group-ObjectSelect-Object相结合。

例如,给出问题中的示例,并使用以下代码:

代码语言:javascript
复制
Import-Csv path\to\csv.csv | Group-Object art |
    ForEach-Object { $_.Group | Select-Object -First 2 } |
         Export-Csv path\to\export.csv -NoTypeInformation

产出如下:

代码语言:javascript
复制
sequence art last  first  address city st     zip
-------- --- ----  -----  ------- ---- --     ---
1        3S  Doe   John   123     Any  Street AnyTown
6        3S  Doe   John   128     Any  Street AnyTown
2        OG  Dow   Jane   124     Any  Street AnyTown
7        OG  Dow   Jane   129     Any  Street AnyTown
3        OGF Cool  Joe    125     Any  Street AnyTown
8        OGF Cool  Joe    130     Any  Street AnyTown
4        SLV Cool  Carol  126     Any  Street AnyTown
9        SLV Cool  Carol  131     Any  Street AnyTown
5        SMP Bravo Johnny 127     Any  Street AnyTown
10       SMP Bravo Johnny 132     Any  Street AnyTown
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74239188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档