我试图找到从这些输出中找到两个变量的最佳解决方案:
Backup server1_incr Completed incr 1/15/2014 6:00:06 PM 0:00 0:04 0.84 1 0 0 19672 100% 2014/01/15-10
Backup server2_incr Completed incr 1/15/2014 6:00:06 PM 0:00 0:04 0.84 1 0 0 19672 100% 2014/01/15-10
Backup vea server3_d4d Completed incr 1/15/2014 6:00:06 PM 0:00 0:04 0.84 1 0 0 19672 100% 2014/01/15-10
Backup ae server4011_d2d Completed incr 1/15/2014 6:00:06 PM 0:00 0:04 0.84 1 0 0 19672 100% 2014/01/15-10
Backup server6_incr Completed incr 1/15/2014 6:00:06 PM 0:00 0:04 0.84 1 0 0 19672 100% 2014/01/15-9我需要从每一行只有两个项目-从2列( server1_incr;ae server4011_d2d...)从最后一栏开始( 2014/01/15-10;2014/01/15-9 )。解析行字符串后,将值存储在hashtab中,供下一步处理:
key value
server1_incr 2014/01/15-10
server2_incr 2014/01/15-10
ae server4011_d2d 2014/01/15-10有什么想法吗?两个晚上没睡觉也不知道怎么回事,现在没电了。谢谢
睡一个小时是个好主意:)现在多睡几分钟,我就有了代码--我知道,很糟糕……但对于基地来说。
$srvIDht = @{}
$inputData = Get-Content "c:\scripts\DPout"
foreach ($line in $inputData) {
$inline = $line
([regex]::match($inline,"(?<=Backup)[^/]+(?=Completed)").Value).ToString().Trim() | foreach { $srv = ($_) }
([regex]::match($inline,"(?<=%\s).*").Value).ToString().Trim() | foreach { $bID = ($_) }
$srvIDht.$srv += @( "$bID" )
} 发布于 2014-01-22 05:15:41
#requires -version 3.0
$lines = get-content "F:\scripts\text2ht\datafile"
$hashTable = [ordered]@{}
foreach ( $line in $lines ) {
if ($line -cmatch '^Backup\s+(.+?)\s+Completed.*%\s+(.*?)$') {
$key = $matches[1]
$value = $matches[2]
$hashTable.Add( $key, $value )
}
}
$hashTable'^Backup\s+(.+?)\s+(?:Completed|Failed|In Progress).*%\s+?(.*?)\s*$'在我的测试用例中,它捕获了Completed、Completed/Errors、Failed和In Progress的状态。
发布于 2014-01-22 04:46:40
如果文本在文件C:\Temp\data.txt中,您可以尝试:
$a = Get-Content C:\Temp\data.txt
$b = $a | % {@{$($_.substring(9,18))=$($_.substring(110,13))}}
$b
Name Value
---- -----
server1_incr 2014/01/15-10
server2_incr 2014/01/15-10
vea server3_d4d 2014/01/15-10
ae server4011_d2d 2014/01/15-10
server6_incr 2014/01/15-9可以修剪关键点和值。
https://stackoverflow.com/questions/21267232
复制相似问题