2016-11-11 79 views
0

我有一個包含信息行的csv文件。一行會告訴我它在做什麼,下一行會告訴我它做了什麼。如果它沒有做任何事情,它不會有下一行。我想過濾掉沒有做任何事的行。所以,如果它遺漏了下一行,請離開那裏,如果有,請將其刪除。以下是CSV的一個例子。使用PowerShell將行與CSV進行比較

Event 
Recipient Disposition: 1 
Message Disposition: 1 
Recipient Disposition: 2 
Recipient Disposition: 3 
Message Disposition: 3 
Recipient Disposition: 4 
Recipient Disposition: 5 
Message Disposition: 5 
Recipient Disposition: 6 
Message Disposition: 6

我只想Recipient Disposition: 2Recipient Disposition: 4過濾和其他人取出。

PowerShell中的任何想法?

+0

是每行字面上會像被格式化?一些消息跟着一個冒號後跟一個數字?順便說一句,這看起來像一個普通的舊文本文件。 –

+1

這不是一個CSV文件。或者只有一個專欄的無聊。 – Joey

+0

你的意思是2和4嗎?因爲如果你想保留1和4,我不清楚這兩者與其他記錄有何區別。 –

回答

1

你的例子正確嗎?從解釋應該不是1,3,5和6保持?

無論哪種方式,您可以使用的一種方法是使用Select-String和正則表達式從文件中選擇所需的行。通過添加Context選項,您還可以選擇下一行。用一些邏輯把它們轉換成一個Where-Object對象來過濾掉你不想要的對象。事情是這樣的:

Select-String .\your_file.txt -Pattern '^Recipient' -Context 0, 1 | ? { 
    ($_.Context.PostContext -split ':\s*')[1] -eq ($_.Line -split ':\s*')[1] 
} | Select line 

這將產生以下輸出:

Line 
---- 
Recipient Disposition: 1 
Recipient Disposition: 3 
Recipient Disposition: 5 
Recipient Disposition: 6 
+0

我正在尋找與這些結果相反的結果。 –

+0

除了結果之外,它是您如何使用'Select-String'與'-Context'結合來解決您的問題的原則。 –

0

編輯更好地解釋腳本

這個腳本做它反過來。它存儲最後一行並與當前行進行比較。切換命令充當Ìf this than that調度程序。如果當前行以RecipientIf開始,以檢查最後一行是否也開始執行,並且如果爲true,則輸出最後一行,因爲該行沒有Messae後續行。在CAS中。行開始於消息沒有完成。在其他情況下(默認),輸出的行就像第一行一樣。

$lines = Get-Content Test.csv 
Foreach ($line in $lines) { 
    switch -wildcard ($line) { 
    "Recipient*" {If ($last -match "^Recipient"){$last}} 
    "Message*" {} 
    default  {$line} 
    } 
    $last = $line 
} 

將顯示此輸出:

Event 
Recipient Disposition: 2 
Recipient Disposition: 4 
Recipient Disposition: [554 Denied - Denied by (Mode: normal); Mode: ; Queued: no] 
Recipient Disposition: [554 Denied - Denied by (Mode: normal); Mode: ; Queued: no] 
+0

這些是我想要的結果,但它似乎並沒有爲我工作。它在哪裏提供信息? –

+0

最後一行存儲在$ last中。交換機作用於當前行的內容,如果它以Recipient開始,則執行花括號中的命令,該命令與RegEx一起檢查var $ last的開始,如果它匹配從開始「^」到Rec,我們有兩個連續的收件人行並輸出存儲在$ last中的第一個。 – LotPings

+0

你真的應該編輯問題來包含更精確的csv版本。我附加並重新運行腳本,並在我編輯的答案中顯示結果。 – LotPings