2017-07-06 3 views
1

私はファイルの各行を調べるために一連の分割を行い、各行の書式付きバージョンを出力します。入力のPowershell Get-Content、最初のオカレンスだけが必要です

例:(ここで258621)同じ接続IDを持つ文字列がある

02/17-07:54:32.290169 [**] [1:1:0] other [**] [Priority: 0] {TCP} 100.100.100.212:6667 -> 192.168.5.81:2848 
02/17-07:54:32.335595 [**] [1:1:0] other [**] [Priority: 0] {TCP} 100.100.100.212:6667 -> 192.168.5.81:2848 
02/17-07:54:32.335628 [**] [1:1:0] other [**] [Priority: 0] {TCP} 192.168.5.81:2848 -> 100.100.100.212:6667 
06/14-06:33:47.258621 [**] [1:1:0] other [**] [Priority: 0] {TCP} 192.168.4.85:4662 -> 69.192.30.179:80 
06/14-06:33:47.258621 [**] [1:1:0] other [**] [Priority: 0] {TCP} 192.168.4.85:4662 -> 69.192.30.179:80 
06/14-06:33:47.258621 [**] [1:1:0] other [**] [Priority: 0] {TCP} 192.168.4.85:4662 -> 69.192.30.179:80 

、私は最初の発生を必要とします。

これは接続IDを取得しますが、同じ接続IDに続く行を無視する方法がわかりません。

Get-Content $logFile -ReadCount 1 | % { 

$_.Split()[0].Split(".")[1] 

} | Out-File "C:\Log\logout.txt" 

出力、私は258621の最初の出現を望む:

290169 
335595 
335628 
258621 
258621 
258621 

トリッキー部分は私も何かを使用して(それが重複した接続IDでないと仮定して)各ラインを再フォーマットする必要があるということです

'|' + (($_.Split()[9, 11, 4] -replace ':', '|') -join '|') + '|' 

所望の出力:

次のように(最終的に、私は、出力の接続IDを望んでいません)
|100.100.100.212|6667|192.168.5.81|2848|other| 
|100.100.100.212|6667|192.168.5.81|2848|other| 
|192.168.5.81|2848|100.100.100.212|6667|other| 
|192.168.4.85|4662|69.192.30.179|80|other| 

ありがとうございました!

答えて

1

ForEach-ObjectループでIFステートメントを使用して、以前にこの接続IDを処理していないことを確認できます。

それが変数$thisIDに割り当てられているとして、それはOut-Fileに渡されていません($connectionIDsも同じ)

Get-Content $logFile -ReadCount 1 | % { 

    $thisID = $_.Split()[0].Split(".")[1] 

    if($thisID -notin $connectionIDs){ 
     '|' + (($_.Split()[9, 11, 4] -replace ':', '|') -join '|') + '|' 
     [array]$connectionIDs += $thisID 
    } 
} | Out-File "C:\Log\logout.txt" 

出力は、あなたの質問には何が一致しました。

+0

美しい!ありがとうございました! – yodish

+0

gms0ulman、[9] OR [11]が "192.168"で始まらない行をさらにフィルタリングする方法を知っていますか?私は一緒に遊んできましたが、まだ成功していません。 – yodish

+0

@yodish IF文に条件を追加することができます。これは正規表現である必要はありません。 ' - と$ line -n​​otlike <>'があります。 '-like/-notlike'を読んで、それを行ってください。 – gms0ulman

関連する問題