如何用PowerShell按指定行号提取文本文件中的药物名称
PowerShell提取固定位置行的药物名称
针对你需要从重复文本区块的固定位置提取药物名称的需求,这里提供两种直接的PowerShell实现方案:
方案一:按指定行号提取
如果已知目标行的具体编号(比如6、17、28行),可以直接筛选对应行:
# 读取文件内容 $fileContent = Get-Content -Path "input.txt" # 定义目标行号(PowerShell中行索引从1开始) $targetLineNumbers = 6, 17, 28 # 转换为0-based索引后筛选,输出到新文件 $fileContent | Select-Object -Index ($targetLineNumbers | ForEach-Object { $_ - 1 }) | Out-File -Path "output.txt"
如果目标行是按固定步长重复(比如每11行出现一次),可以自动生成行号数组,避免手动列举:
$fileContent = Get-Content -Path "input.txt" $totalLines = $fileContent.Count # 生成从6开始,步长11的行号数组,直到文件末尾 $targetLineNumbers = for ($i = 6; $i -le $totalLines; $i += 11) { $i } $fileContent | Select-Object -Index ($targetLineNumbers | ForEach-Object { $_ - 1 }) | Out-File -Path "output.txt"
方案二:按区块分割提取
如果每个重复区块的行数固定(比如每个区块11行,药物名称在区块内第6行),可以按区块批量处理:
# 按每11行分割成区块,提取每个区块的第6行(0-based索引为5) Get-Content -Path "input.txt" -ReadCount 11 | ForEach-Object { # 确保区块行数足够,避免索引越界 if ($_.Count -ge 6) { $_[5].Trim() } } | Out-File -Path "output.txt"
可选优化:过滤无效内容
如果需要确保提取的是至少包含两个字母的单词,可以添加过滤步骤:
Get-Content -Path "input.txt" -ReadCount 11 | ForEach-Object { if ($_.Count -ge 6) { $_[5].Trim() } } | Where-Object { $_ -match '^[a-zA-Z]{2,}$' } # 只保留符合要求的内容 | Out-File -Path "output.txt"
内容的提问来源于stack exchange,提问作者robertmer
相关产品推荐
相关产品推荐

