如何在两个单词之间找到文本并将其导出到txt.file

问题描述 投票:0回答:1

我有一个包含许多行的CSV文件,我想在<STR_0.005_Long>,µm,5.000µm之间获取文本。

CSV中的示例行:

Straightness(Up/Down) <STR_0.005_Long>,4.444µm,5.000µm,,Pass,‌​2.476µm,1.968µm,25,0‌​.566µm,0.720µm 

这是我想写的脚本:

$arr = @()
$path = "C:\Users\georgi\Desktop\5\test.csv"
$pattern = "(?<=.*<STR_0.005_Long>,)\w+?(?=µm,5.000µm*)"
$Text = Get-Content $path
$Text.GetType() | Format-Table -AutoSize

$Text[14] | Foreach {
    if ([Regex]::IsMatch($_, $pattern)) {
        $arr += [Regex]::Match($_, $pattern)
        Out-File C:\Users\georgi\Desktop\5\test.txt -Append
    }
}
$arr | Foreach {$_.Value} | Out-File C:\Users\georgi\Desktop\5\test.txt -Append
powershell
1个回答
1
投票

Where-Object过滤器与正则表达式一起使用,只需将匹配输出到输出文件:

Get-Content $path |
    Where-Object { $_ -match $pattern } |
    ForEach-Object { $matches[0] } |
    Out-File 'C:\Users\georgi\Desktop\5\test.txt'

当然,既然你有一个CSV,你可以简单地使用Import-Csv并导出该特定列的值:

Import-Csv $path | Select-Object -Expand 'column_name' |
    Out-File 'C:\Users\georgi\Desktop\5\test.txt'

column_name替换为列的实际名称。如果CSV没有列标题,您可以通过-Header参数指定一个:

Import-Csv $path -Header 'col1','col2','col3',... |
    Select-Object -Expand 'col2' |
    Out-File 'C:\Users\georgi\Desktop\5\test.txt'
© www.soinside.com 2019 - 2024. All rights reserved.