我有以下逐行字符串(迭代行):
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)
将数据传输到Sort-Object
并使用正则表达式从字符串中提取接口名称:
... | Sort-Object { $_ -replace '.*interface (.*?),.*', '$1' }
但是,这种排序不会保留具有相同接口名称的元素的日期顺序,如注释中指出的@wOxxOm。如果您还需要,还需要修改替换,例如这样的事情:
... | Sort-Object { $_ -replace '^(\S+ \S+).*interface (.*?),.*', '$2 $1' }
答案 1 :(得分:0)
非常感谢Ansgar Wiechers
我没有使用RegEx做了上面提到的那种:
...| 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