PowerShell格式化GetChildItem输出及自动读取最新子文件夹需求
PowerShell 测序样本配对脚本解决方案
核心实现逻辑
- 自动定位最新子文件夹:扫描当前目录下的子文件夹,按创建时间排序取最新的
- 精准配对R/F文件:提取文件名中的样本标识,匹配对应标记的文件
- 按要求格式输出:每行一对文件路径,用TAB分隔写入文本
可直接运行的完整脚本
# 获取当前目录下最新创建的子文件夹 $latestFolder = Get-ChildItem -Directory | Sort-Object CreationTime -Descending | Select-Object -First 1 # 检查是否存在子文件夹 if (-not $latestFolder) { Write-Error "未检测到任何子文件夹,请确认路径正确" exit 1 } # 获取目标文件夹内所有带R/F标记的测序文件(可根据实际后缀调整,比如.fastq.gz) $allFiles = Get-ChildItem -Path $latestFolder.FullName -File -Filter "*[RF]*" # 按样本名称分组(假设文件名格式为「样本名_R.后缀」或「样本名_F.后缀」,可按需修改正则) $sampleGroups = $allFiles | Group-Object -Property { $_.BaseName -replace '_R$|_F$', '' # 移除末尾的_R/_F,提取样本核心名称 } # 生成配对内容 $outputContent = @() foreach ($group in $sampleGroups) { $rFile = $group.Group | Where-Object { $_.BaseName -match '_R$' } $fFile = $group.Group | Where-Object { $_.BaseName -match '_F$' } if ($rFile -and $fFile) { # 拼接TAB分隔的一行内容 $outputContent += "$($rFile.FullName)`t$($fFile.FullName)" } else { Write-Warning "样本「$($group.Name)」缺少对应的R或F文件,请检查" } } # 输出到文本文件(默认保存在最新子文件夹下) $outputPath = Join-Path -Path $latestFolder.FullName -ChildPath "样本配对列表.txt" $outputContent | Out-File -Path $outputPath -Encoding utf8 Write-Host "配对列表已生成:$outputPath"
脚本调整说明
- 文件名格式适配:如果你的文件标记不是
_R/_F(比如R1/R2、_forward/_reverse),只需修改两处正则:- 分组时的
_R$|_F$改成对应标记(比如R1$|R2$) - 匹配文件时的
_R$/_F$改成对应标记
- 分组时的
- 输出路径自定义:如果不想把结果保存在最新子文件夹,直接修改
$outputPath的赋值即可
使用步骤
- 将脚本保存为
测序样本配对.ps1 - 把脚本放到包含所有样本子文件夹的父目录中
- 右键选择「用PowerShell运行」,或在PowerShell窗口执行
.\测序样本配对.ps1
内容的提问来源于stack exchange,提问作者Kristinn Gunnarsson
相关产品推荐
相关产品推荐

