2016-10-04 57 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

相关问题