使用PowerShell拆分字符串

使用PowerShell拆分字符串,powershell,Powershell,我有一个包含S.M.a.R.T的日志文件。我硬盘上的数据。 我想使用PowerShell处理此文件。 这是我日志文件的一部分 3 Spin_Up_Time 0x0020 100 100 000 Old_age Offline - 0 4 Start_Stop_Count 0x0030 100 100 000 Old_age Offline - 0 5 Reallocated

我有一个包含S.M.a.R.T的日志文件。我硬盘上的数据。 我想使用PowerShell处理此文件。 这是我日志文件的一部分

3 Spin_Up_Time            0x0020   100   100   000    Old_age   Offline      -       0
4 Start_Stop_Count        0x0030   100   100   000    Old_age   Offline      -       0
5 Reallocated_Sector_Ct   0x0032   100   100   000    Old_age   Always       -       0
这是我的密码

$i = 1
$a = Get-Content log.txt

do {
$trimmed = $a[$i].trim()
$splitted = $trimmed.split(" ")
$i++
}while ($i -le 3)
如果我使用.split(“”),它只对第三行起作用。 如何正确分割所有行


谢谢你

这对你有什么好处

$a = Get-Content log.txt    
-split $a
我明白了

H:\> -split $a
3
Spin_Up_Time
0x0020
100
100
000
Old_age
Offline
-
0
4
Start_Stop_Count
0x0030
100
100
000
Old_age
Offline
-
0
5
Reallocated_Sector_Ct
0x0032
100
100
000
Old_age
Always
-
0

这对你有什么好处

$a = Get-Content log.txt    
-split $a
我明白了

H:\> -split $a
3
Spin_Up_Time
0x0020
100
100
000
Old_age
Offline
-
0
4
Start_Stop_Count
0x0030
100
100
000
Old_age
Offline
-
0
5
Reallocated_Sector_Ct
0x0032
100
100
000
Old_age
Always
-
0

这对你有什么好处

$a = Get-Content log.txt    
-split $a
我明白了

H:\> -split $a
3
Spin_Up_Time
0x0020
100
100
000
Old_age
Offline
-
0
4
Start_Stop_Count
0x0030
100
100
000
Old_age
Offline
-
0
5
Reallocated_Sector_Ct
0x0032
100
100
000
Old_age
Always
-
0

这对你有什么好处

$a = Get-Content log.txt    
-split $a
我明白了

H:\> -split $a
3
Spin_Up_Time
0x0020
100
100
000
Old_age
Offline
-
0
4
Start_Stop_Count
0x0030
100
100
000
Old_age
Offline
-
0
5
Reallocated_Sector_Ct
0x0032
100
100
000
Old_age
Always
-
0

代码多一点,但最终它会让您更容易使用:

$SMART = gc c:\temp\test.txt | %{
    $temp = $_ -split " "|?{!([string]::IsNullOrWhiteSpace($_))}
    new-object psobject -Property @{
        "Entry"=$temp[0]
        "TestName"=$temp[1]
        "HexCode"=$temp[2]
        "Number1"=$temp[3]
        "Number2"=$temp[4]
        "Number3"=$temp[5]
        "Age"=$temp[6]
        "Status"=$temp[7]
        "Filler"=$temp[8]
        "Zero?"=$temp[9]
    }
}
$SMART|FT Entry,TestName,HexCode,Number1,Number2,Number3,Age,Status,Filler,Zero?

代码多一点,但最终它会让您更容易使用:

$SMART = gc c:\temp\test.txt | %{
    $temp = $_ -split " "|?{!([string]::IsNullOrWhiteSpace($_))}
    new-object psobject -Property @{
        "Entry"=$temp[0]
        "TestName"=$temp[1]
        "HexCode"=$temp[2]
        "Number1"=$temp[3]
        "Number2"=$temp[4]
        "Number3"=$temp[5]
        "Age"=$temp[6]
        "Status"=$temp[7]
        "Filler"=$temp[8]
        "Zero?"=$temp[9]
    }
}
$SMART|FT Entry,TestName,HexCode,Number1,Number2,Number3,Age,Status,Filler,Zero?

代码多一点,但最终它会让您更容易使用:

$SMART = gc c:\temp\test.txt | %{
    $temp = $_ -split " "|?{!([string]::IsNullOrWhiteSpace($_))}
    new-object psobject -Property @{
        "Entry"=$temp[0]
        "TestName"=$temp[1]
        "HexCode"=$temp[2]
        "Number1"=$temp[3]
        "Number2"=$temp[4]
        "Number3"=$temp[5]
        "Age"=$temp[6]
        "Status"=$temp[7]
        "Filler"=$temp[8]
        "Zero?"=$temp[9]
    }
}
$SMART|FT Entry,TestName,HexCode,Number1,Number2,Number3,Age,Status,Filler,Zero?

代码多一点,但最终它会让您更容易使用:

$SMART = gc c:\temp\test.txt | %{
    $temp = $_ -split " "|?{!([string]::IsNullOrWhiteSpace($_))}
    new-object psobject -Property @{
        "Entry"=$temp[0]
        "TestName"=$temp[1]
        "HexCode"=$temp[2]
        "Number1"=$temp[3]
        "Number2"=$temp[4]
        "Number3"=$temp[5]
        "Age"=$temp[6]
        "Status"=$temp[7]
        "Filler"=$temp[8]
        "Zero?"=$temp[9]
    }
}
$SMART|FT Entry,TestName,HexCode,Number1,Number2,Number3,Age,Status,Filler,Zero?

我喜欢使用regex'这里有一个示例,允许您命名列

$a = Get-Content log.txt
$pattern = [regex]'(?<rowid>\d+)\s(?<desc>[a-zA-Z_]+)\s+(?<hexdata>0x\d{4})\s+(?<col4>\d{3})\s+(?<col5>\d{3})\s+(?<col6>\d{3})\s+(?<text1>.+?)\s+(?<state>.+?)-\s+0'

foreach ($line in $a) {
    if ($line -match $pattern) {
        $dataobj = New-Object PSObject
        $dataobj | Add-Member -type NoteProperty -name "Description" -value $matches['desc']
        $dataobj | Add-Member -type NoteProperty -name "Hex Data" -value $matches['hexdata']
        $dataobj | Add-Member -type NoteProperty -name "State" -value $matches['state']

        $dataobj
    }

}

我喜欢使用regex'这里有一个示例,允许您命名列

$a = Get-Content log.txt
$pattern = [regex]'(?<rowid>\d+)\s(?<desc>[a-zA-Z_]+)\s+(?<hexdata>0x\d{4})\s+(?<col4>\d{3})\s+(?<col5>\d{3})\s+(?<col6>\d{3})\s+(?<text1>.+?)\s+(?<state>.+?)-\s+0'

foreach ($line in $a) {
    if ($line -match $pattern) {
        $dataobj = New-Object PSObject
        $dataobj | Add-Member -type NoteProperty -name "Description" -value $matches['desc']
        $dataobj | Add-Member -type NoteProperty -name "Hex Data" -value $matches['hexdata']
        $dataobj | Add-Member -type NoteProperty -name "State" -value $matches['state']

        $dataobj
    }

}

我喜欢使用regex'这里有一个示例,允许您命名列

$a = Get-Content log.txt
$pattern = [regex]'(?<rowid>\d+)\s(?<desc>[a-zA-Z_]+)\s+(?<hexdata>0x\d{4})\s+(?<col4>\d{3})\s+(?<col5>\d{3})\s+(?<col6>\d{3})\s+(?<text1>.+?)\s+(?<state>.+?)-\s+0'

foreach ($line in $a) {
    if ($line -match $pattern) {
        $dataobj = New-Object PSObject
        $dataobj | Add-Member -type NoteProperty -name "Description" -value $matches['desc']
        $dataobj | Add-Member -type NoteProperty -name "Hex Data" -value $matches['hexdata']
        $dataobj | Add-Member -type NoteProperty -name "State" -value $matches['state']

        $dataobj
    }

}

我喜欢使用regex'这里有一个示例,允许您命名列

$a = Get-Content log.txt
$pattern = [regex]'(?<rowid>\d+)\s(?<desc>[a-zA-Z_]+)\s+(?<hexdata>0x\d{4})\s+(?<col4>\d{3})\s+(?<col5>\d{3})\s+(?<col6>\d{3})\s+(?<text1>.+?)\s+(?<state>.+?)-\s+0'

foreach ($line in $a) {
    if ($line -match $pattern) {
        $dataobj = New-Object PSObject
        $dataobj | Add-Member -type NoteProperty -name "Description" -value $matches['desc']
        $dataobj | Add-Member -type NoteProperty -name "Hex Data" -value $matches['hexdata']
        $dataobj | Add-Member -type NoteProperty -name "State" -value $matches['state']

        $dataobj
    }

}

如果我将$splitted[2]放在循环结束之前,我无法获得预期值。(0x0020 0x0030 0x0032)如果我将$splitted[2]放在循环结束之前,我无法获得预期值。(0x0020 0x0030 0x0032)如果我将$splitted[2]放在循环结束之前,我无法获得预期值。(0x0020 0x0030 0x0032)如果将$splitted[2]放在循环结束之前,则无法获得预期值。(0x0020 0x0030 0x0032)