【问题标题】:How can I conditionally count fields in a CSV column如何有条件地计算 CSV 列中的字段
【发布时间】:2017-08-15 23:15:58
【问题描述】:

我有一个 CSV。在特定列上,我想计算可以找到特定字符串的行数。我已将字符串列表放在一个变量中:

$list = 'test'
$tmpFiltre2 = 'c:\test.csv'
Import-Csv $tmpFiltre2 -Delimiter "," | Where-Object {
    $_.msg -and $list -like $_.msg
} | group msg -NoElement

我最终得到正确的结果错误消息首先显示:我没有列出msg 列将包含的所有可能值)

指定的通配符模式无效:[120] board
在 c:\myscript.PS1:134 char:70

某些字段在列内有方括号。

CSV 文件如下所示

味精,人 测试,账单 120测试,伊莱 测试测试,eli [1] 测试,账单 [120] 板、单 报警 [1],乔

输出将如下所示:

测试,4

因为有 4 行,每行至少包含一次字符串“test”。

【问题讨论】:

  • 我没有列出 msg 列将包含的所有可能值 您没有列出任何值。举一些例子,也许-like 不是这个理想的运算符。
  • 为确保我们以您希望的方式回答这个问题,我们需要查看一些示例输出。我不明白你的行之间的关系。您现在所做的只是过滤掉一些记录,甚至是我不完全理解的记录。对于每个剩余的记录,您的计数将为 1。您想知道该文件中“120 条测试”记录的数量吗?

标签: powershell csv powershell-3.0


【解决方案1】:

试试这个

$list = @('test', 'alarm')
import-csv "C:\temp\test.csv" | foreach{
    $msg=$_.msg
    $list | where {$msg -like "*$_*"} | select @{N="WordFounded";E={$_}}, @{N="Msg";E={$msg}}
} | group WordFounded

【讨论】:

  • 如果我的列表中只有一个元素包含一个单词,我可以工作,但当字符串包含由空格分隔的单词时不再工作: $list='ntp,test 120' 在这种情况下没有显示结果,因为我相信逗号分隔的列表被视为整个字符串。
  • 有效!!谢谢 。我在末尾添加了 -NoElement 以删除我不想显示的数据。
猜你喜欢
  • 2020-08-19
  • 1970-01-01
  • 2021-06-21
  • 1970-01-01
  • 2011-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多