2017-03-23 3 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]基板℃で
:\するMyScript.ps1:134文字:70

一部フィールドCOL内の角括弧を有しますumn。この

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

よう

CSVファイルを見出力は次のようになります。4行、少なくとも一度は、文字列「test」を含むそれらのそれぞれがあるので

 
test,4 

+2

_Iを試すには、MSG列があなたをcontain_するすべての可能な値はいずれもリストされていないリストされていません。いくつかの例を示してください。おそらく 'のようなもの 'はこれのための理想的な演算子ではありません。 – 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

私のリストに1つの単語しか含まれていない要素が1つしかありませんが、文字列にスペースで区切られた単語が含まれている場合は機能しません:$ list = 'ntp、test 120'この場合、結果は表示されません。私が信じている文字列全体としてみなされます。 – Goul

+0

私のコードを修正しました – Esperento57

+0

それは動作します!ありがとう。最後に-NoElementを追加して、表示したくないデータを削除しました。 – Goul

関連する問題