首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从非结构化文本到hashtab的powershell和字符串

从非结构化文本到hashtab的powershell和字符串
EN

Stack Overflow用户
提问于 2014-01-22 03:23:32
回答 2查看 579关注 0票数 1

我试图找到从这些输出中找到两个变量的最佳解决方案:

代码语言:javascript
运行
复制
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中,供下一步处理:

代码语言:javascript
运行
复制
    key                 value
server1_incr        2014/01/15-10
server2_incr        2014/01/15-10
ae server4011_d2d   2014/01/15-10

有什么想法吗?两个晚上没睡觉也不知道怎么回事,现在没电了。谢谢

睡一个小时是个好主意:)现在多睡几分钟,我就有了代码--我知道,很糟糕……但对于基地来说。

代码语言:javascript
运行
复制
$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" )
} 
EN

回答 2

Stack Overflow用户

发布于 2014-01-22 05:15:41

代码语言:javascript
运行
复制
#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

代码语言:javascript
运行
复制
'^Backup\s+(.+?)\s+(?:Completed|Failed|In Progress).*%\s+?(.*?)\s*$'

在我的测试用例中,它捕获了Completed、Completed/Errors、Failed和In Progress的状态。

票数 2
EN

Stack Overflow用户

发布于 2014-01-22 04:46:40

如果文本在文件C:\Temp\data.txt中,您可以尝试:

代码语言:javascript
运行
复制
$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

可以修剪关键点和值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21267232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档