2016-10-04 101 views
0

我有行字符串以下行(迭代線):如何根據行中的特定單詞對行字符串(迭代字符串)進行排序?

05-10-2016 15:22:20 %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback1, changed state to up 
05-10-2016 15:22:31 %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial1/0, changed state to down 
05-10-2016 15:22:43 %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback1, changed state to down 
05-10-2016 15:22:53 %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial1/0, changed state to up

我想根據接口名,時間戳行進行排序,這樣的結果應該是:

05-10-2016 15:22:20 %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback1, changed state to up 
05-10-2016 15:22:43 %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback1, changed state to down 
05-10-2016 15:22:31 %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial1/0, changed state to down 
05-10-2016 15:22:53 %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial1/0, changed state to up

有人可以幫助我使用PowerShell完成此任務嗎?

注意:接口名稱可能與上面提到的不同。

+0

哪條命令是你用來獲得這個輸出? –

+0

這是一個測試日誌文件,它使用get-content PS命令​​讀取。 – Sami

回答

0

非常感謝安斯加爾Wiechers

我沒有提到的排序,而無需使用正則表達式:

...| Sort-Object { $_.split(',')[0].split(' ')[-1] , $_.split('')[0]+" "+$_.split('')[1] } 

說明:

$_.split(',')[0].split(' ')[-1]  # Extracting Interface name 
$_.split('')[0]      # Extracting Date 
$_.split('')[1]      # Extracting Time 
+0

在我看來,它比RegEx更簡單,更易讀。 – Sami

0

管你的數據轉化爲Sort-Object,並使用正則表達式從字符串中提取接口名稱:

... | Sort-Object { $_ -replace '.*interface (.*?),.*', '$1' } 

然而,這種分類並不具有相同的接口名稱的元素保存日期順序,如評論中指出的@wOxxOm。如果你需要這個,你需要修改替換,例如對這樣的事情:

... | Sort-Object { $_ -replace '^(\S+ \S+).*interface (.*?),.*', '$2 $1' } 
+1

我認爲時間戳順序將是不確定的,如果你沒有添加它(或原始字符串)在接口名稱替換後:''$ 1 $&'' – wOxxOm

+0

你用一個命令與正則表達式,...事實上,我不是一個正則表達式的英雄。非常感謝你:) – Sami

相關問題