2017-03-23 21 views
0

我有CSV。在特定的列上,我想要统计我将找到特定字符串的行数。我已经把一个变量内部串的列表:如何有条件地计算CSV列中的字段

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

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

指定的通配符图案是无效的:[120]板
,在C:\ myscript.PS1:134字符:70

一些字段具有方括号内的山口内UMN。

CSV文件看起来像这样

 
msg,Personn 
test,bill 
120 test,eli 
test test,eli 
[1] test,bill 
[120] board,bill 
alarm [1],Jo 

的输出如下:

 
test,4 

由于有4行,其中每一个含有至少一次字符串“测试”。

+2

_I没有列出所有的味精列将contain_您还没有列出的任何可能的值。显示一些例子,或许''like'不是这个的理想操作符。 – Matt

+0

为了确保我们以您想要的方式回答这个问题,我们需要查看一些示例输出。我不明白你的行之间的关系。你现在所做的只是过滤出一些记录,甚至是我不完全理解。您的每个剩余记录数为1。你想知道该文件中“120测试”记录的数量吗? – Matt

回答

0

试试这个

$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 
+0

我的工作原理是如果我的列表中只有一个元素包含单个单词,但当字符串包含空格分隔的单词时不再有效:$ list ='ntp,test 120',因为在这种情况下没有显示结果,因为昏迷分离的列表被认为是我相信的整个字符串。 – Goul

+0

我已修改我的密码试一试 – Esperento57

+0

它的工作原理!谢谢 。我在最后添加了-NoElement以删除我不想显示的数据。 – Goul

相关问题