2017-08-05 13 views
1

私は、データが "|"で区切られたログファイルを持っています。シンボル。いいえPowershellを使用してカスタムログデータを処理する方法は?

"Username|servername|access|password|group" 
"Username|servername|access|password|group" 

私はデータを検証する必要があります。グループ列(レコード)に情報がないか、または空の場合その行だけを別のファイルに書き込む必要があります。私を助けてください。前もって感謝します。

答えて

2

あなたは-Delimiter '|''Import-CSVを使用することができます。ファイルにヘッダー行がない場合は、-Headerを使用して定義する必要があります。 Whereを使用して空のグループ行をフィルタリングし、Export-CSV-Delimiterにもう一度入力して、それらの行の新しいファイルを作成することができます。例えば

Import-CSV 'YourLog.log' -Delimiter '|' -Header 'Username','Servername','Access','Password','Group' | 
    Where {$_.'Group' -eq ''} | 
    Export-CSV 'EmptyGroupLines.log' -Delimiter '|' 
+1

Answer Markありがとうございました。私は結果を試して戻ってきます。 – Subhantech

0

グループの列が常に同じ場所にある場合は、そのように見えますが、splitメソッドを使用できます。あなたは確かにコードを再編成することができます。私はスプリットをどのように使うことができるかの例として以下を使用しました。

foreach文は、ファイル内の各行を繰り返し処理します。 if(!$($ groupstring.Split( '|')[4])ifがnullかどうかを確認します。

$groupstring = 'Username|servername|access|password|group' 
$groupstring.Split('|')[4] 


foreach ($item in $collection) 
{ 
    if (!$($groupstring.Split('|')[4])) 
    { 
     Write-Host "variable is null" 
    } 
} 

これが役立ちます。 ありがとう、ティム。

+0

回答ティムいただきありがとうございます、私は試してみて、私の結果で戻ってくるだろう。 – Subhantech

+0

いいえ、心配しないでください。私の答えを見て、私はあなたが求めたライン全体の輸出をしませんでした。 Mark Wraggと@mjolinerは良い答えのように見えます。 –

+0

いいえいいえ、ティム、私はあなたの答えに感謝します。私にとって、確かな答えはありませんが、私はすべての可能性を検証しています。そして、あなたの解決策も試しています。どっちがいい。私がやった最初の方法は分割法でした。だから私はすぐにあなたのソリューションをチェックしなかったのです。私はマークの答えが私のために働いたのが好きだった。しかし、長い道のりがあります。私のスクリプトは大きなものなので、私はすべての可能性を学んでいます。問題の例は、私が欲しいものの要約です。 – Subhantech

3

データが欠落していないかどうか確認する場合は、regexの '(\ S + \ |){4} \ S +'を使用してクイックチェックを実行できます。 -ReadCountパラメータでGet-Contentを使用すると、一度に1レコードずつ処理することなく、ディスクのI/Oとメモリ使用量を最小限に抑えながら、一度に数千レコードのバッチで作業できます。

Get-Content $inputfile -ReadCount 2000 | 
foreach { 
      $_ -notmatch '(\S+\|){4}\S+' | 
      Add-Content $outputfile 
     } 
+0

Answer Miolinorありがとうございました。私は試して結果に戻ってきます。 – Subhantech

関連する問題