如何用PowerShell读取大文本文件并提取ID、test、test1存入表格
用PowerShell提取文本文件中的ID、test、test1值并生成表格
当然没问题!用PowerShell完全可以搞定这个需求,我给你准备了两套实用脚本——分别对应单个内容块和多个内容块的场景,都能精准提取目标值并整理成结构化表格。
场景1:文件里只有一组ID、test、test1数据
如果你的文本文件里只有一个ID和对应的test、test1值,用下面的脚本就足够了:
# 替换成你的目标文本文件路径 $filePath = "C:\your\file\path\your-file.txt" # 一次性读取整个文件内容(方便正则匹配) $fileContent = Get-Content -Path $filePath -Raw # 提取ID值 if ($fileContent -match 'ID\s*:\s*(\d+)') { $extractedID = $matches[1] } # 提取test和test1的数值 if ($fileContent -match 'Score test:\s*([\d.]+),\s*test1\s*:\s*([\d.]+)') { $testValue = [double]$matches[1] $test1Value = [double]$matches[2] } # 把提取到的数据整理成自定义对象 $resultObject = [PSCustomObject]@{ ID = $extractedID test = $testValue test1 = $test1Value } # 输出美观的表格 $resultObject | Format-Table -AutoSize
脚本说明
Get-Content -Raw:一次性读取整个文件,避免逐行处理的麻烦,尤其适合匹配跨行内容(这里目标字段是单行,但Raw模式更省心)- 正则表达式:
ID\s*:\s*(\d+):匹配ID : 数字格式的内容,\s*用来忽略冒号前后的任意空格,(\d+)捕获ID的数字部分Score test:\s*([\d.]+),\s*test1\s*:\s*([\d.]+):匹配test和test1的浮点数值,[\d.]+能匹配整数或小数
- 转换成
[double]:把提取到的字符串转成数值类型,方便后续做计算或排序;如果不需要数值类型,直接去掉这个转换即可 Format-Table -AutoSize:自动调整列宽,输出整齐的表格
场景2:文件里有多组ID、test、test1数据
如果你的文本文件里包含多个分隔线分隔的内容块(每个块都有自己的ID、test、test1),用下面的批量提取脚本:
$filePath = "C:\your\file\path\your-file.txt" $fileContent = Get-Content -Path $filePath -Raw # 用分隔线分割所有内容块,筛选出包含ID和test的有效块 $contentBlocks = $fileContent -split '----------------------------------------------------------------' | Where-Object { $_ -match 'ID\s*:' -and $_ -match 'test:\s*[\d.]+' } # 遍历每个块,提取数据并收集结果 $allResults = foreach ($block in $contentBlocks) { # 提取当前块的ID if ($block -match 'ID\s*:\s*(\d+)') { $currentID = $matches[1] } # 提取当前块的test和test1值 if ($block -match 'Score test:\s*([\d.]+),\s*test1\s*:\s*([\d.]+)') { $currentTest = [double]$matches[1] $currentTest1 = [double]$matches[2] } # 生成当前块的结果对象 [PSCustomObject]@{ ID = $currentID test = $currentTest test1 = $currentTest1 } } # 输出所有结果的表格 $allResults | Format-Table -AutoSize # 可选:把结果导出到CSV文件,方便用Excel等工具分析 # $allResults | Export-Csv -Path "C:\output\extracted-data.csv" -NoTypeInformation
脚本说明
-split '----------------------------------------------------------------':用文本里的分隔线把整个文件拆分成单个内容块Where-Object:过滤掉空的或无效的块,只保留包含ID和test数据的块- 遍历每个块提取数据,最后把所有结果收集到数组里,输出成统一的表格
- 导出CSV的功能可以把数据保存成结构化文件,方便后续处理
内容的提问来源于stack exchange,提问作者Harshit
相关产品推荐
相关产品推荐

