PowerShell - 在两行之间提取数据

时间:2017-03-17 15:30:53

标签: powershell parsing

我正在寻找我希望是一件简单的事情。我试图从.csv文件中提取数据,但数据是在两行连字符之间,如下所示:

File1

header1,header2,header3,header4
--------------------------------------------------------
data1,data2,data3,data4
data1,data2,data3,data4
data1,data2,data3,data4
data1,data2,data3,data4
data1,data2,data3,data4
data1,data2,data3,data4
data1,data2,data3,data4
data1,data2,data3,data4
data1,data2,data3,data4
data1,data2,data3,data4
data1,data2,data3,data4
data1,data2,data3,data4
data1,data2,data3,data4
--------------------------------------------------------
end of file 

我只想保存连字符行之间的数据。由于线条完全相同,我无法找到这样做的方法。谢谢你的帮助。

4 个答案:

答案 0 :(得分:0)

这将获取您想要的内容并将其输出到output.csv

$input  = "C:\example\File1.csv"
$output = "C:\example\output.csv"

Get-Content $input | Where-Object {$_ -like "*,*"} | Select-Object -Skip 1 | Out-File $output

现在你可以Get-Content $output

答案 1 :(得分:0)

解决方案2

$startend=(Select-String -Path "C:\Temp\test.txt" -Pattern "--------------------------------------------------------").LineNumber
(Get-Content "C:\Temp\test.txt")[$startend[0]..($startend[1]-2)]

答案 2 :(得分:0)

解决方案1:

Get-Content "C:\Temp\test.txt" | where {$_ -like '*,*'} | ConvertFrom-Csv

答案 3 :(得分:0)

解决方案3:

$firstrowfounded=$false

Get-Content "C:\Temp\test.txt" | foreach {
    if ($firstrowfounded )
    {
        if ($_ -like "*--*")
        {
           break 
        }
        else
        {
           $_ 
        }

    }
    elseif ($_ -like "*--*")
    {
       $firstrowfounded=$true 
    }

}
相关问题