arrays - 无法从按特定 header 过滤的 CSV 文件中提取第一行

标签 arrays powershell csv

我有一个 csv 文件,其中包含如下数据:

account,id,name
1234,a3bu5,test
12,b4cf8,test
789,t4wy7,test2

我需要按名称 header 进行过滤,并将所有帐户号码提取到一个数组中。

在我当前的代码中,我正在迭代多个名称,并希望将它们的帐号存储在单独的数组中。 (即本例中的 (1234,12) 和 (789))

示例代码(选择标题):

$namesToParse = @("test")
$inputFile = "output.csv"
$testArray = @()
$csvFile = Import-csv $inputFile
For ($i = 0; $i-le $namesToParse.length-1; $i++) {
    (" - Getting account numbers for '{0}'`n" -f ($namesToParse[$i]) ) | write-host -ForegroundColor Blue
    #SELECT HEADER
    $csv = $csvFile | Select-String -Pattern $namesToParse[$i] | select $csvFile.account | Out-String
}

$testArray = $csv.split(",")
$testArray[0]

示例代码(选择行):

$namesToParse = @("test")
$inputFile = "output.csv"
$testArray = @()
$csvFile = Import-csv $inputFile
For ($i = 0; $i-le $namesToParse.length-1; $i++) {
    (" - Getting account numbers for '{0}'`n" -f ($namesToParse[$i]) ) | write-host -ForegroundColor Blue
    #SELECT LINE
    $csv = $csvFile | Select-String -Pattern $namesToParse[$i] | select line | Out-String
}

$testArray = $csv.split(",")
$testArray[0]

我知道问题出在我的 csv 变量上,但我不确定使用什么来显示我的结果。我在网上找到的最接近的示例涉及选择如上所示的帐户标题,但这会忽略按名称过滤并显示所有帐号的模式。如果我使用选择行而不是帐户,则该模式有效,但会收到所有值,我留下的数据比我需要的更多。这为脚本添加了我希望消除的额外步骤。

检索我需要的信息的最佳方法是什么,或者我是否错误地传递了这些信息?

最佳答案

我同意,你似乎把事情复杂化了。

  • Import-csv 读取数据
  • Format-Table 以及 -GroupBy 参数

> Import-Csv .\output.csv | Format-Table account -GroupBy name


   name: test

account
-------
1234
12


   name: test2

account
-------
789

使用 Group-Object 收集每个名称帐户的另一种方法

Import-Csv .\output.csv | Select-Object account,name | 
    Group-Object name | ForEach-Object {
        "{0,15}:{1}" -f $_.name,($_.group.account -join ',')}

       test:1234,12
      test2:789

或者根据该信息创建一个新表

$NewTable =  Import-Csv .\output.csv | Select-Object account,name |
     Group-Object name | ForEach-Object {
         [PSCustomObject]@{
             'Name'     = $_.name
             'Accounts' = ($_.group.account -join ',')
          }
      }
$NewTable

Name  Accounts
----  --------
test  1234,12
test2 789

关于arrays - 无法从按特定 header 过滤的 CSV 文件中提取第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50340235/

相关文章:

Python:创建一个比较两个数组并在两个数组之间插入较大元素的函数

powershell - 我应该如何在 Powershell 中创建一个可重用的 "log"对象?

powershell - Powershell将现有电子邮件从文本格式更改为html正文格式

powershell - 在 PowerShell 中将文件名复制到文本文件

python - Tkinter,如果从 CSV 文件中删除值,则删除冗余行

PostgreSQL 复制到 - CSV 文件名编码

arrays - 无法解决的 Perl 错误?

javascript - AJAX成功时在span内显示数组单词

javascript - 检查数组是否不为空且长度为 JavaScript

java csv分号问题